pg_query 2.2.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +86 -0
- data/README.md +57 -31
- data/Rakefile +5 -6
- data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
- data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
- data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/extconf.rb +33 -9
- data/ext/pg_query/include/pg_query.h +30 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +839 -290
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +638 -481
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +6786 -4193
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +450 -330
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +1489 -1044
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +157 -118
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +1933 -1410
- data/ext/pg_query/include/postgres/access/amapi.h +303 -0
- data/ext/pg_query/include/postgres/access/attmap.h +54 -0
- data/ext/pg_query/include/postgres/access/attnum.h +64 -0
- data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
- data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
- data/ext/pg_query/include/postgres/access/clog.h +62 -0
- data/ext/pg_query/include/postgres/access/commit_ts.h +73 -0
- data/ext/pg_query/include/postgres/access/detoast.h +82 -0
- data/ext/pg_query/include/postgres/access/genam.h +246 -0
- data/ext/pg_query/include/postgres/access/gin.h +91 -0
- data/ext/pg_query/include/postgres/access/htup.h +89 -0
- data/ext/pg_query/include/postgres/access/htup_details.h +811 -0
- data/ext/pg_query/include/postgres/access/itup.h +170 -0
- data/ext/pg_query/include/postgres/access/parallel.h +81 -0
- data/ext/pg_query/include/postgres/access/printtup.h +35 -0
- data/ext/pg_query/include/postgres/access/relation.h +28 -0
- data/ext/pg_query/include/postgres/access/relscan.h +191 -0
- data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
- data/ext/pg_query/include/postgres/access/rmgrlist.h +49 -0
- data/ext/pg_query/include/postgres/access/sdir.h +67 -0
- data/ext/pg_query/include/postgres/access/skey.h +151 -0
- data/ext/pg_query/include/postgres/access/slru.h +218 -0
- data/ext/pg_query/include/postgres/access/stratnum.h +85 -0
- data/ext/pg_query/include/postgres/access/sysattr.h +29 -0
- data/ext/pg_query/include/postgres/access/table.h +28 -0
- data/ext/pg_query/include/postgres/access/tableam.h +2110 -0
- data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
- data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
- data/ext/pg_query/include/postgres/access/transam.h +418 -0
- data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
- data/ext/pg_query/include/postgres/access/tupconvert.h +54 -0
- data/ext/pg_query/include/postgres/access/tupdesc.h +154 -0
- data/ext/pg_query/include/postgres/access/tupmacs.h +207 -0
- data/ext/pg_query/include/postgres/access/twophase.h +65 -0
- data/ext/pg_query/include/postgres/access/xact.h +530 -0
- data/ext/pg_query/include/postgres/access/xlog.h +310 -0
- data/ext/pg_query/include/postgres/access/xlog_internal.h +405 -0
- data/ext/pg_query/include/postgres/access/xlogbackup.h +43 -0
- data/ext/pg_query/include/postgres/access/xlogdefs.h +82 -0
- data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/postgres/access/xlogreader.h +444 -0
- data/ext/pg_query/include/postgres/access/xlogrecord.h +248 -0
- data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
- data/ext/pg_query/include/postgres/archive/archive_module.h +67 -0
- data/ext/pg_query/include/postgres/c.h +1374 -0
- data/ext/pg_query/include/postgres/catalog/catalog.h +47 -0
- data/ext/pg_query/include/postgres/catalog/catversion.h +62 -0
- data/ext/pg_query/include/postgres/catalog/dependency.h +228 -0
- data/ext/pg_query/include/postgres/catalog/genbki.h +149 -0
- data/ext/pg_query/include/postgres/catalog/index.h +218 -0
- data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
- data/ext/pg_query/include/postgres/catalog/namespace.h +189 -0
- data/ext/pg_query/include/postgres/catalog/objectaccess.h +267 -0
- data/ext/pg_query/include/postgres/catalog/objectaddress.h +93 -0
- data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +182 -0
- data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +78 -0
- data/ext/pg_query/include/postgres/catalog/pg_am.h +66 -0
- data/ext/pg_query/include/postgres/catalog/pg_am_d.h +47 -0
- data/ext/pg_query/include/postgres/catalog/pg_attribute.h +240 -0
- data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +62 -0
- data/ext/pg_query/include/postgres/catalog/pg_authid.h +66 -0
- data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +60 -0
- data/ext/pg_query/include/postgres/catalog/pg_class.h +235 -0
- data/ext/pg_query/include/postgres/catalog/pg_class_d.h +134 -0
- data/ext/pg_query/include/postgres/catalog/pg_collation.h +106 -0
- data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +66 -0
- data/ext/pg_query/include/postgres/catalog/pg_constraint.h +278 -0
- data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +74 -0
- data/ext/pg_query/include/postgres/catalog/pg_control.h +260 -0
- data/ext/pg_query/include/postgres/catalog/pg_conversion.h +79 -0
- data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +38 -0
- data/ext/pg_query/include/postgres/catalog/pg_database.h +129 -0
- data/ext/pg_query/include/postgres/catalog/pg_database_d.h +53 -0
- data/ext/pg_query/include/postgres/catalog/pg_depend.h +77 -0
- data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +36 -0
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +60 -0
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +36 -0
- data/ext/pg_query/include/postgres/catalog/pg_index.h +92 -0
- data/ext/pg_query/include/postgres/catalog/pg_index_d.h +59 -0
- data/ext/pg_query/include/postgres/catalog/pg_language.h +75 -0
- data/ext/pg_query/include/postgres/catalog/pg_language_d.h +41 -0
- data/ext/pg_query/include/postgres/catalog/pg_namespace.h +67 -0
- data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +36 -0
- data/ext/pg_query/include/postgres/catalog/pg_opclass.h +91 -0
- data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +51 -0
- data/ext/pg_query/include/postgres/catalog/pg_operator.h +124 -0
- data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +142 -0
- data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +67 -0
- data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +51 -0
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +76 -0
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +36 -0
- data/ext/pg_query/include/postgres/catalog/pg_proc.h +223 -0
- data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +101 -0
- data/ext/pg_query/include/postgres/catalog/pg_publication.h +161 -0
- data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +38 -0
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +65 -0
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +33 -0
- data/ext/pg_query/include/postgres/catalog/pg_statistic.h +288 -0
- data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +199 -0
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +91 -0
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +45 -0
- data/ext/pg_query/include/postgres/catalog/pg_transform.h +51 -0
- data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +34 -0
- data/ext/pg_query/include/postgres/catalog/pg_trigger.h +153 -0
- data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +109 -0
- data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +56 -0
- data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +34 -0
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +62 -0
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +35 -0
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +63 -0
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +37 -0
- data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +54 -0
- data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +34 -0
- data/ext/pg_query/include/postgres/catalog/pg_type.h +407 -0
- data/ext/pg_query/include/postgres/catalog/pg_type_d.h +324 -0
- data/ext/pg_query/include/postgres/catalog/storage.h +50 -0
- data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
- data/ext/pg_query/include/postgres/commands/async.h +49 -0
- data/ext/pg_query/include/postgres/commands/dbcommands.h +37 -0
- data/ext/pg_query/include/postgres/commands/defrem.h +161 -0
- data/ext/pg_query/include/postgres/commands/event_trigger.h +97 -0
- data/ext/pg_query/include/postgres/commands/explain.h +145 -0
- data/ext/pg_query/include/postgres/commands/prepare.h +61 -0
- data/ext/pg_query/include/postgres/commands/tablespace.h +69 -0
- data/ext/pg_query/include/postgres/commands/trigger.h +288 -0
- data/ext/pg_query/include/postgres/commands/user.h +43 -0
- data/ext/pg_query/include/postgres/commands/vacuum.h +388 -0
- data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
- data/ext/pg_query/include/postgres/common/file_perm.h +56 -0
- data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
- data/ext/pg_query/include/postgres/common/hashfn.h +119 -0
- data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
- data/ext/pg_query/include/postgres/common/int.h +512 -0
- data/ext/pg_query/include/postgres/common/keywords.h +29 -0
- data/ext/pg_query/include/postgres/common/kwlookup.h +44 -0
- data/ext/pg_query/include/postgres/common/pg_prng.h +62 -0
- data/ext/pg_query/include/postgres/common/relpath.h +97 -0
- data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
- data/ext/pg_query/include/postgres/common/sha2.h +32 -0
- data/ext/pg_query/include/postgres/common/string.h +44 -0
- data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +124 -0
- data/ext/pg_query/include/postgres/common/unicode_nonspacing_table.h +326 -0
- data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5261 -0
- data/ext/pg_query/include/postgres/copyfuncs.switch.c +989 -0
- data/ext/pg_query/include/postgres/datatype/timestamp.h +269 -0
- data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3310 -0
- data/ext/pg_query/include/postgres/equalfuncs.switch.c +836 -0
- data/ext/pg_query/include/postgres/executor/execdesc.h +70 -0
- data/ext/pg_query/include/postgres/executor/executor.h +681 -0
- data/ext/pg_query/include/postgres/executor/functions.h +56 -0
- data/ext/pg_query/include/postgres/executor/instrument.h +120 -0
- data/ext/pg_query/include/postgres/executor/spi.h +207 -0
- data/ext/pg_query/include/postgres/executor/tablefunc.h +67 -0
- data/ext/pg_query/include/postgres/executor/tuptable.h +523 -0
- data/ext/pg_query/include/postgres/fmgr.h +800 -0
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
- data/ext/pg_query/include/postgres/funcapi.h +360 -0
- data/ext/pg_query/include/postgres/gram.h +1168 -0
- data/ext/pg_query/include/postgres/gramparse.h +75 -0
- data/ext/pg_query/include/postgres/jit/jit.h +106 -0
- data/ext/pg_query/include/postgres/kwlist_d.h +1164 -0
- data/ext/pg_query/include/postgres/lib/dshash.h +130 -0
- data/ext/pg_query/include/postgres/lib/ilist.h +1159 -0
- data/ext/pg_query/include/postgres/lib/pairingheap.h +102 -0
- data/ext/pg_query/include/postgres/lib/simplehash.h +1206 -0
- data/ext/pg_query/include/postgres/lib/sort_template.h +445 -0
- data/ext/pg_query/include/postgres/lib/stringinfo.h +243 -0
- data/ext/pg_query/include/postgres/libpq/auth.h +37 -0
- data/ext/pg_query/include/postgres/libpq/crypt.h +47 -0
- data/ext/pg_query/include/postgres/libpq/hba.h +186 -0
- data/ext/pg_query/include/postgres/libpq/libpq-be.h +361 -0
- data/ext/pg_query/include/postgres/libpq/libpq.h +143 -0
- data/ext/pg_query/include/postgres/libpq/pqcomm.h +169 -0
- data/ext/pg_query/include/postgres/libpq/pqformat.h +209 -0
- data/ext/pg_query/include/postgres/libpq/pqsignal.h +54 -0
- data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
- data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
- data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
- data/ext/pg_query/include/postgres/mb/pg_wchar.h +793 -0
- data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +24 -0
- data/ext/pg_query/include/postgres/miscadmin.h +527 -0
- data/ext/pg_query/include/postgres/nodes/bitmapset.h +140 -0
- data/ext/pg_query/include/postgres/nodes/execnodes.h +2855 -0
- data/ext/pg_query/include/postgres/nodes/extensible.h +164 -0
- data/ext/pg_query/include/postgres/nodes/lockoptions.h +61 -0
- data/ext/pg_query/include/postgres/nodes/makefuncs.h +127 -0
- data/ext/pg_query/include/postgres/nodes/memnodes.h +152 -0
- data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
- data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +222 -0
- data/ext/pg_query/include/postgres/nodes/nodes.h +435 -0
- data/ext/pg_query/include/postgres/nodes/nodetags.h +491 -0
- data/ext/pg_query/include/postgres/nodes/params.h +170 -0
- data/ext/pg_query/include/postgres/nodes/parsenodes.h +4233 -0
- data/ext/pg_query/include/postgres/nodes/pathnodes.h +3438 -0
- data/ext/pg_query/include/postgres/nodes/pg_list.h +686 -0
- data/ext/pg_query/include/postgres/nodes/plannodes.h +1593 -0
- data/ext/pg_query/include/postgres/nodes/primnodes.h +2339 -0
- data/ext/pg_query/include/postgres/nodes/print.h +34 -0
- data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
- data/ext/pg_query/include/postgres/nodes/replnodes.h +132 -0
- data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
- data/ext/pg_query/include/postgres/nodes/tidbitmap.h +75 -0
- data/ext/pg_query/include/postgres/nodes/value.h +90 -0
- data/ext/pg_query/include/postgres/optimizer/cost.h +216 -0
- data/ext/pg_query/include/postgres/optimizer/geqo.h +90 -0
- data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +45 -0
- data/ext/pg_query/include/postgres/optimizer/optimizer.h +205 -0
- data/ext/pg_query/include/postgres/optimizer/paths.h +271 -0
- data/ext/pg_query/include/postgres/optimizer/planmain.h +123 -0
- data/ext/pg_query/include/postgres/parser/analyze.h +66 -0
- data/ext/pg_query/include/postgres/parser/kwlist.h +518 -0
- data/ext/pg_query/include/postgres/parser/parse_agg.h +65 -0
- data/ext/pg_query/include/postgres/parser/parse_coerce.h +105 -0
- data/ext/pg_query/include/postgres/parser/parse_expr.h +25 -0
- data/ext/pg_query/include/postgres/parser/parse_func.h +74 -0
- data/ext/pg_query/include/postgres/parser/parse_node.h +358 -0
- data/ext/pg_query/include/postgres/parser/parse_oper.h +68 -0
- data/ext/pg_query/include/postgres/parser/parse_relation.h +129 -0
- data/ext/pg_query/include/postgres/parser/parse_type.h +61 -0
- data/ext/pg_query/include/postgres/parser/parser.h +68 -0
- data/ext/pg_query/include/postgres/parser/parsetree.h +61 -0
- data/ext/pg_query/include/postgres/parser/scanner.h +152 -0
- data/ext/pg_query/include/postgres/parser/scansup.h +27 -0
- data/ext/pg_query/include/postgres/partitioning/partdefs.h +26 -0
- data/ext/pg_query/include/postgres/pg_config.h +985 -0
- data/ext/pg_query/include/postgres/pg_config_manual.h +385 -0
- data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
- data/ext/pg_query/include/postgres/pg_getopt.h +56 -0
- data/ext/pg_query/include/postgres/pg_trace.h +17 -0
- data/ext/pg_query/include/postgres/pgstat.h +780 -0
- data/ext/pg_query/include/postgres/pgtime.h +94 -0
- data/ext/pg_query/include/postgres/pl_gram.h +385 -0
- data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +52 -0
- data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +114 -0
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +112 -0
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +246 -0
- data/ext/pg_query/include/postgres/plerrcodes.h +998 -0
- data/ext/pg_query/include/postgres/plpgsql.h +1342 -0
- data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +32 -0
- data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
- data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +256 -0
- data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +254 -0
- data/ext/pg_query/include/postgres/port/atomics/fallback.h +170 -0
- data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +323 -0
- data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +119 -0
- data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +121 -0
- data/ext/pg_query/include/postgres/port/atomics/generic.h +437 -0
- data/ext/pg_query/include/postgres/port/atomics.h +606 -0
- data/ext/pg_query/include/postgres/port/pg_bitutils.h +421 -0
- data/ext/pg_query/include/postgres/port/pg_bswap.h +161 -0
- data/ext/pg_query/include/postgres/port/pg_crc32c.h +110 -0
- data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
- data/ext/pg_query/include/postgres/port/simd.h +422 -0
- data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
- data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
- data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
- data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
- data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
- data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/sys/socket.h +34 -0
- data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
- data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
- data/ext/pg_query/include/postgres/port/win32.h +59 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
- data/ext/pg_query/include/postgres/port/win32_port.h +582 -0
- data/ext/pg_query/include/postgres/port.h +555 -0
- data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
- data/ext/pg_query/include/postgres/postgres.h +579 -0
- data/ext/pg_query/include/postgres/postgres_ext.h +73 -0
- data/ext/pg_query/include/postgres/postmaster/autovacuum.h +69 -0
- data/ext/pg_query/include/postgres/postmaster/bgworker.h +164 -0
- data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +60 -0
- data/ext/pg_query/include/postgres/postmaster/bgwriter.h +45 -0
- data/ext/pg_query/include/postgres/postmaster/interrupt.h +32 -0
- data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
- data/ext/pg_query/include/postgres/postmaster/postmaster.h +101 -0
- data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
- data/ext/pg_query/include/postgres/postmaster/syslogger.h +101 -0
- data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
- data/ext/pg_query/include/postgres/postmaster/walwriter.h +23 -0
- data/ext/pg_query/include/postgres/regex/regex.h +272 -0
- data/ext/pg_query/include/postgres/replication/logicallauncher.h +34 -0
- data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
- data/ext/pg_query/include/postgres/replication/logicalworker.h +33 -0
- data/ext/pg_query/include/postgres/replication/origin.h +73 -0
- data/ext/pg_query/include/postgres/replication/reorderbuffer.h +734 -0
- data/ext/pg_query/include/postgres/replication/slot.h +289 -0
- data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
- data/ext/pg_query/include/postgres/replication/syncrep.h +109 -0
- data/ext/pg_query/include/postgres/replication/walreceiver.h +504 -0
- data/ext/pg_query/include/postgres/replication/walsender.h +76 -0
- data/ext/pg_query/include/postgres/rewrite/prs2lock.h +46 -0
- data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +41 -0
- data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +96 -0
- data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +26 -0
- data/ext/pg_query/include/postgres/storage/block.h +108 -0
- data/ext/pg_query/include/postgres/storage/buf.h +46 -0
- data/ext/pg_query/include/postgres/storage/bufmgr.h +411 -0
- data/ext/pg_query/include/postgres/storage/bufpage.h +510 -0
- data/ext/pg_query/include/postgres/storage/condition_variable.h +73 -0
- data/ext/pg_query/include/postgres/storage/dsm.h +61 -0
- data/ext/pg_query/include/postgres/storage/dsm_impl.h +79 -0
- data/ext/pg_query/include/postgres/storage/fd.h +219 -0
- data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
- data/ext/pg_query/include/postgres/storage/ipc.h +87 -0
- data/ext/pg_query/include/postgres/storage/item.h +19 -0
- data/ext/pg_query/include/postgres/storage/itemid.h +184 -0
- data/ext/pg_query/include/postgres/storage/itemptr.h +245 -0
- data/ext/pg_query/include/postgres/storage/large_object.h +100 -0
- data/ext/pg_query/include/postgres/storage/latch.h +196 -0
- data/ext/pg_query/include/postgres/storage/lmgr.h +126 -0
- data/ext/pg_query/include/postgres/storage/lock.h +624 -0
- data/ext/pg_query/include/postgres/storage/lockdefs.h +61 -0
- data/ext/pg_query/include/postgres/storage/lwlock.h +228 -0
- data/ext/pg_query/include/postgres/storage/lwlocknames.h +47 -0
- data/ext/pg_query/include/postgres/storage/off.h +57 -0
- data/ext/pg_query/include/postgres/storage/pg_sema.h +61 -0
- data/ext/pg_query/include/postgres/storage/pg_shmem.h +93 -0
- data/ext/pg_query/include/postgres/storage/pmsignal.h +105 -0
- data/ext/pg_query/include/postgres/storage/predicate.h +83 -0
- data/ext/pg_query/include/postgres/storage/proc.h +488 -0
- data/ext/pg_query/include/postgres/storage/procarray.h +103 -0
- data/ext/pg_query/include/postgres/storage/proclist_types.h +53 -0
- data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
- data/ext/pg_query/include/postgres/storage/procsignal.h +75 -0
- data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +100 -0
- data/ext/pg_query/include/postgres/storage/s_lock.h +847 -0
- data/ext/pg_query/include/postgres/storage/sharedfileset.h +37 -0
- data/ext/pg_query/include/postgres/storage/shm_mq.h +86 -0
- data/ext/pg_query/include/postgres/storage/shm_toc.h +58 -0
- data/ext/pg_query/include/postgres/storage/shmem.h +59 -0
- data/ext/pg_query/include/postgres/storage/sinval.h +153 -0
- data/ext/pg_query/include/postgres/storage/smgr.h +130 -0
- data/ext/pg_query/include/postgres/storage/spin.h +77 -0
- data/ext/pg_query/include/postgres/storage/standby.h +109 -0
- data/ext/pg_query/include/postgres/storage/standbydefs.h +74 -0
- data/ext/pg_query/include/postgres/storage/sync.h +66 -0
- data/ext/pg_query/include/postgres/tcop/cmdtag.h +62 -0
- data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +219 -0
- data/ext/pg_query/include/postgres/tcop/deparse_utility.h +108 -0
- data/ext/pg_query/include/postgres/tcop/dest.h +148 -0
- data/ext/pg_query/include/postgres/tcop/fastpath.h +20 -0
- data/ext/pg_query/include/postgres/tcop/pquery.h +51 -0
- data/ext/pg_query/include/postgres/tcop/tcopprot.h +98 -0
- data/ext/pg_query/include/postgres/tcop/utility.h +112 -0
- data/ext/pg_query/include/postgres/tsearch/ts_cache.h +96 -0
- data/ext/pg_query/include/postgres/utils/acl.h +290 -0
- data/ext/pg_query/include/postgres/utils/aclchk_internal.h +45 -0
- data/ext/pg_query/include/postgres/utils/array.h +481 -0
- data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
- data/ext/pg_query/include/postgres/utils/backend_progress.h +46 -0
- data/ext/pg_query/include/postgres/utils/backend_status.h +340 -0
- data/ext/pg_query/include/postgres/utils/builtins.h +139 -0
- data/ext/pg_query/include/postgres/utils/bytea.h +28 -0
- data/ext/pg_query/include/postgres/utils/catcache.h +231 -0
- data/ext/pg_query/include/postgres/utils/date.h +118 -0
- data/ext/pg_query/include/postgres/utils/datetime.h +367 -0
- data/ext/pg_query/include/postgres/utils/datum.h +76 -0
- data/ext/pg_query/include/postgres/utils/dsa.h +166 -0
- data/ext/pg_query/include/postgres/utils/elog.h +540 -0
- data/ext/pg_query/include/postgres/utils/errcodes.h +352 -0
- data/ext/pg_query/include/postgres/utils/expandeddatum.h +170 -0
- data/ext/pg_query/include/postgres/utils/expandedrecord.h +241 -0
- data/ext/pg_query/include/postgres/utils/float.h +357 -0
- data/ext/pg_query/include/postgres/utils/fmgroids.h +3347 -0
- data/ext/pg_query/include/postgres/utils/fmgrprotos.h +2904 -0
- data/ext/pg_query/include/postgres/utils/fmgrtab.h +49 -0
- data/ext/pg_query/include/postgres/utils/guc.h +456 -0
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +184 -0
- data/ext/pg_query/include/postgres/utils/guc_tables.h +323 -0
- data/ext/pg_query/include/postgres/utils/hsearch.h +153 -0
- data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
- data/ext/pg_query/include/postgres/utils/inval.h +68 -0
- data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
- data/ext/pg_query/include/postgres/utils/lsyscache.h +215 -0
- data/ext/pg_query/include/postgres/utils/memdebug.h +82 -0
- data/ext/pg_query/include/postgres/utils/memutils.h +193 -0
- data/ext/pg_query/include/postgres/utils/memutils_internal.h +176 -0
- data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +253 -0
- data/ext/pg_query/include/postgres/utils/numeric.h +110 -0
- data/ext/pg_query/include/postgres/utils/palloc.h +151 -0
- data/ext/pg_query/include/postgres/utils/partcache.h +103 -0
- data/ext/pg_query/include/postgres/utils/pg_locale.h +136 -0
- data/ext/pg_query/include/postgres/utils/pgstat_internal.h +827 -0
- data/ext/pg_query/include/postgres/utils/plancache.h +238 -0
- data/ext/pg_query/include/postgres/utils/portal.h +252 -0
- data/ext/pg_query/include/postgres/utils/probes.h +114 -0
- data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
- data/ext/pg_query/include/postgres/utils/queryenvironment.h +74 -0
- data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
- data/ext/pg_query/include/postgres/utils/rel.h +711 -0
- data/ext/pg_query/include/postgres/utils/relcache.h +155 -0
- data/ext/pg_query/include/postgres/utils/reltrigger.h +81 -0
- data/ext/pg_query/include/postgres/utils/resowner.h +167 -0
- data/ext/pg_query/include/postgres/utils/ruleutils.h +52 -0
- data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +61 -0
- data/ext/pg_query/include/postgres/utils/snapmgr.h +130 -0
- data/ext/pg_query/include/postgres/utils/snapshot.h +219 -0
- data/ext/pg_query/include/postgres/utils/sortsupport.h +391 -0
- data/ext/pg_query/include/postgres/utils/syscache.h +136 -0
- data/ext/pg_query/include/postgres/utils/timeout.h +96 -0
- data/ext/pg_query/include/postgres/utils/timestamp.h +147 -0
- data/ext/pg_query/include/postgres/utils/tuplesort.h +472 -0
- data/ext/pg_query/include/postgres/utils/tuplestore.h +88 -0
- data/ext/pg_query/include/postgres/utils/typcache.h +210 -0
- data/ext/pg_query/include/postgres/utils/varlena.h +53 -0
- data/ext/pg_query/include/postgres/utils/wait_event.h +108 -0
- data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
- data/ext/pg_query/include/postgres/utils/xml.h +94 -0
- data/ext/pg_query/include/postgres/varatt.h +358 -0
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +8077 -6217
- data/ext/pg_query/include/protobuf/pg_query.pb.h +132024 -88124
- data/ext/pg_query/pg_query.c +10 -1
- data/ext/pg_query/pg_query.pb-c.c +24028 -17173
- data/ext/pg_query/pg_query_deparse.c +1 -9902
- data/ext/pg_query/pg_query_fingerprint.c +42 -18
- data/ext/pg_query/pg_query_fingerprint.h +1 -1
- data/ext/pg_query/pg_query_internal.h +1 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +1 -25
- data/ext/pg_query/pg_query_normalize.c +44 -3
- data/ext/pg_query/pg_query_outfuncs_json.c +62 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
- data/ext/pg_query/pg_query_parse.c +47 -5
- data/ext/pg_query/pg_query_parse_plpgsql.c +19 -18
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +45 -10
- data/ext/pg_query/pg_query_ruby.c +5 -0
- data/ext/pg_query/pg_query_scan.c +4 -3
- data/ext/pg_query/pg_query_split.c +6 -5
- data/ext/pg_query/postgres_deparse.c +11496 -0
- data/ext/pg_query/postgres_deparse.h +9 -0
- data/ext/pg_query/src_backend_catalog_namespace.c +262 -71
- data/ext/pg_query/src_backend_catalog_pg_proc.c +3 -2
- data/ext/pg_query/src_backend_commands_define.c +12 -3
- data/ext/pg_query/src_backend_nodes_bitmapset.c +142 -156
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +100 -5881
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3831
- data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
- data/ext/pg_query/src_backend_nodes_list.c +89 -18
- data/ext/pg_query/src_backend_nodes_makefuncs.c +138 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +433 -132
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +45255 -38885
- data/ext/pg_query/src_backend_parser_parser.c +53 -8
- data/ext/pg_query/src_backend_parser_scan.c +6999 -3438
- data/ext/pg_query/src_backend_parser_scansup.c +5 -28
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +156 -114
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +14 -2
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_numutils.c +488 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +247 -34
- data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
- data/ext/pg_query/src_backend_utils_error_elog.c +543 -343
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +47 -18
- data/ext/pg_query/src_backend_utils_init_globals.c +22 -7
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +84 -148
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +502 -0
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +166 -0
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +708 -499
- data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +1115 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +710 -218
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +1079 -0
- data/ext/pg_query/src_common_encnames.c +46 -44
- data/ext/pg_query/src_common_hashfn.c +3 -3
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +602 -510
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +3 -3
- data/ext/pg_query/src_common_stringinfo.c +21 -4
- data/ext/pg_query/src_common_wchar.c +754 -178
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +143 -24
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1295 -1255
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +20 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
- data/ext/pg_query/src_port_pg_bitutils.c +283 -54
- data/ext/pg_query/src_port_pgstrcasecmp.c +57 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +56 -39
- data/ext/pg_query/src_port_strerror.c +9 -21
- data/ext/pg_query/src_port_strlcpy.c +79 -0
- data/lib/pg_query/filter_columns.rb +1 -1
- data/lib/pg_query/fingerprint.rb +10 -9
- data/lib/pg_query/node.rb +18 -13
- data/lib/pg_query/param_refs.rb +3 -3
- data/lib/pg_query/parse.rb +25 -15
- data/lib/pg_query/parse_error.rb +1 -0
- data/lib/pg_query/pg_query_pb.rb +181 -3038
- data/lib/pg_query/scan.rb +1 -0
- data/lib/pg_query/treewalker.rb +55 -8
- data/lib/pg_query/truncate.rb +19 -21
- data/lib/pg_query/version.rb +1 -1
- metadata +447 -436
- data/ext/pg_query/guc-file.c +0 -0
- data/ext/pg_query/include/access/amapi.h +0 -246
- data/ext/pg_query/include/access/attmap.h +0 -52
- data/ext/pg_query/include/access/attnum.h +0 -64
- data/ext/pg_query/include/access/clog.h +0 -61
- data/ext/pg_query/include/access/commit_ts.h +0 -77
- data/ext/pg_query/include/access/detoast.h +0 -92
- data/ext/pg_query/include/access/genam.h +0 -228
- data/ext/pg_query/include/access/gin.h +0 -78
- data/ext/pg_query/include/access/htup.h +0 -89
- data/ext/pg_query/include/access/htup_details.h +0 -819
- data/ext/pg_query/include/access/itup.h +0 -161
- data/ext/pg_query/include/access/parallel.h +0 -82
- data/ext/pg_query/include/access/printtup.h +0 -35
- data/ext/pg_query/include/access/relation.h +0 -28
- data/ext/pg_query/include/access/relscan.h +0 -176
- data/ext/pg_query/include/access/rmgr.h +0 -35
- data/ext/pg_query/include/access/rmgrlist.h +0 -49
- data/ext/pg_query/include/access/sdir.h +0 -58
- data/ext/pg_query/include/access/skey.h +0 -151
- data/ext/pg_query/include/access/stratnum.h +0 -83
- data/ext/pg_query/include/access/sysattr.h +0 -29
- data/ext/pg_query/include/access/table.h +0 -27
- data/ext/pg_query/include/access/tableam.h +0 -1825
- data/ext/pg_query/include/access/transam.h +0 -265
- data/ext/pg_query/include/access/tupconvert.h +0 -51
- data/ext/pg_query/include/access/tupdesc.h +0 -154
- data/ext/pg_query/include/access/tupmacs.h +0 -247
- data/ext/pg_query/include/access/twophase.h +0 -63
- data/ext/pg_query/include/access/xact.h +0 -469
- data/ext/pg_query/include/access/xlog.h +0 -398
- data/ext/pg_query/include/access/xlog_internal.h +0 -339
- data/ext/pg_query/include/access/xlogdefs.h +0 -109
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/access/xlogreader.h +0 -337
- data/ext/pg_query/include/access/xlogrecord.h +0 -227
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/c.h +0 -1334
- data/ext/pg_query/include/catalog/catalog.h +0 -42
- data/ext/pg_query/include/catalog/catversion.h +0 -58
- data/ext/pg_query/include/catalog/dependency.h +0 -277
- data/ext/pg_query/include/catalog/genbki.h +0 -64
- data/ext/pg_query/include/catalog/index.h +0 -199
- data/ext/pg_query/include/catalog/indexing.h +0 -366
- data/ext/pg_query/include/catalog/namespace.h +0 -188
- data/ext/pg_query/include/catalog/objectaccess.h +0 -197
- data/ext/pg_query/include/catalog/objectaddress.h +0 -84
- data/ext/pg_query/include/catalog/pg_aggregate.h +0 -176
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +0 -77
- data/ext/pg_query/include/catalog/pg_am.h +0 -60
- data/ext/pg_query/include/catalog/pg_am_d.h +0 -45
- data/ext/pg_query/include/catalog/pg_attribute.h +0 -204
- data/ext/pg_query/include/catalog/pg_attribute_d.h +0 -59
- data/ext/pg_query/include/catalog/pg_authid.h +0 -58
- data/ext/pg_query/include/catalog/pg_authid_d.h +0 -49
- data/ext/pg_query/include/catalog/pg_class.h +0 -200
- data/ext/pg_query/include/catalog/pg_class_d.h +0 -103
- data/ext/pg_query/include/catalog/pg_collation.h +0 -73
- data/ext/pg_query/include/catalog/pg_collation_d.h +0 -45
- data/ext/pg_query/include/catalog/pg_constraint.h +0 -247
- data/ext/pg_query/include/catalog/pg_constraint_d.h +0 -67
- data/ext/pg_query/include/catalog/pg_control.h +0 -252
- data/ext/pg_query/include/catalog/pg_conversion.h +0 -72
- data/ext/pg_query/include/catalog/pg_conversion_d.h +0 -35
- data/ext/pg_query/include/catalog/pg_depend.h +0 -73
- data/ext/pg_query/include/catalog/pg_depend_d.h +0 -34
- data/ext/pg_query/include/catalog/pg_event_trigger.h +0 -51
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +0 -34
- data/ext/pg_query/include/catalog/pg_index.h +0 -80
- data/ext/pg_query/include/catalog/pg_index_d.h +0 -56
- data/ext/pg_query/include/catalog/pg_language.h +0 -67
- data/ext/pg_query/include/catalog/pg_language_d.h +0 -39
- data/ext/pg_query/include/catalog/pg_namespace.h +0 -59
- data/ext/pg_query/include/catalog/pg_namespace_d.h +0 -34
- data/ext/pg_query/include/catalog/pg_opclass.h +0 -85
- data/ext/pg_query/include/catalog/pg_opclass_d.h +0 -49
- data/ext/pg_query/include/catalog/pg_operator.h +0 -104
- data/ext/pg_query/include/catalog/pg_operator_d.h +0 -106
- data/ext/pg_query/include/catalog/pg_opfamily.h +0 -60
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +0 -47
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +0 -63
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +0 -35
- data/ext/pg_query/include/catalog/pg_proc.h +0 -211
- data/ext/pg_query/include/catalog/pg_proc_d.h +0 -99
- data/ext/pg_query/include/catalog/pg_publication.h +0 -118
- data/ext/pg_query/include/catalog/pg_publication_d.h +0 -36
- data/ext/pg_query/include/catalog/pg_replication_origin.h +0 -57
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +0 -29
- data/ext/pg_query/include/catalog/pg_statistic.h +0 -275
- data/ext/pg_query/include/catalog/pg_statistic_d.h +0 -194
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +0 -74
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +0 -40
- data/ext/pg_query/include/catalog/pg_transform.h +0 -45
- data/ext/pg_query/include/catalog/pg_transform_d.h +0 -32
- data/ext/pg_query/include/catalog/pg_trigger.h +0 -137
- data/ext/pg_query/include/catalog/pg_trigger_d.h +0 -106
- data/ext/pg_query/include/catalog/pg_ts_config.h +0 -50
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +0 -32
- data/ext/pg_query/include/catalog/pg_ts_dict.h +0 -54
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +0 -33
- data/ext/pg_query/include/catalog/pg_ts_parser.h +0 -57
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +0 -35
- data/ext/pg_query/include/catalog/pg_ts_template.h +0 -48
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +0 -32
- data/ext/pg_query/include/catalog/pg_type.h +0 -373
- data/ext/pg_query/include/catalog/pg_type_d.h +0 -285
- data/ext/pg_query/include/catalog/storage.h +0 -48
- data/ext/pg_query/include/commands/async.h +0 -54
- data/ext/pg_query/include/commands/dbcommands.h +0 -35
- data/ext/pg_query/include/commands/defrem.h +0 -173
- data/ext/pg_query/include/commands/event_trigger.h +0 -88
- data/ext/pg_query/include/commands/explain.h +0 -127
- data/ext/pg_query/include/commands/prepare.h +0 -61
- data/ext/pg_query/include/commands/tablespace.h +0 -69
- data/ext/pg_query/include/commands/trigger.h +0 -285
- data/ext/pg_query/include/commands/user.h +0 -37
- data/ext/pg_query/include/commands/vacuum.h +0 -293
- data/ext/pg_query/include/commands/variable.h +0 -38
- data/ext/pg_query/include/common/file_perm.h +0 -56
- data/ext/pg_query/include/common/hashfn.h +0 -104
- data/ext/pg_query/include/common/ip.h +0 -37
- data/ext/pg_query/include/common/keywords.h +0 -33
- data/ext/pg_query/include/common/kwlookup.h +0 -44
- data/ext/pg_query/include/common/relpath.h +0 -90
- data/ext/pg_query/include/common/string.h +0 -19
- data/ext/pg_query/include/common/unicode_combining_table.h +0 -196
- data/ext/pg_query/include/datatype/timestamp.h +0 -197
- data/ext/pg_query/include/executor/execdesc.h +0 -70
- data/ext/pg_query/include/executor/executor.h +0 -620
- data/ext/pg_query/include/executor/functions.h +0 -41
- data/ext/pg_query/include/executor/instrument.h +0 -101
- data/ext/pg_query/include/executor/spi.h +0 -175
- data/ext/pg_query/include/executor/tablefunc.h +0 -67
- data/ext/pg_query/include/executor/tuptable.h +0 -487
- data/ext/pg_query/include/fmgr.h +0 -775
- data/ext/pg_query/include/funcapi.h +0 -348
- data/ext/pg_query/include/getaddrinfo.h +0 -162
- data/ext/pg_query/include/jit/jit.h +0 -105
- data/ext/pg_query/include/kwlist_d.h +0 -1072
- data/ext/pg_query/include/lib/ilist.h +0 -727
- data/ext/pg_query/include/lib/pairingheap.h +0 -102
- data/ext/pg_query/include/lib/simplehash.h +0 -1059
- data/ext/pg_query/include/lib/stringinfo.h +0 -161
- data/ext/pg_query/include/libpq/auth.h +0 -29
- data/ext/pg_query/include/libpq/crypt.h +0 -46
- data/ext/pg_query/include/libpq/hba.h +0 -140
- data/ext/pg_query/include/libpq/libpq-be.h +0 -326
- data/ext/pg_query/include/libpq/libpq.h +0 -134
- data/ext/pg_query/include/libpq/pqcomm.h +0 -208
- data/ext/pg_query/include/libpq/pqformat.h +0 -210
- data/ext/pg_query/include/libpq/pqsignal.h +0 -42
- data/ext/pg_query/include/mb/pg_wchar.h +0 -673
- data/ext/pg_query/include/mb/stringinfo_mb.h +0 -24
- data/ext/pg_query/include/miscadmin.h +0 -489
- data/ext/pg_query/include/nodes/bitmapset.h +0 -122
- data/ext/pg_query/include/nodes/execnodes.h +0 -2523
- data/ext/pg_query/include/nodes/extensible.h +0 -160
- data/ext/pg_query/include/nodes/lockoptions.h +0 -61
- data/ext/pg_query/include/nodes/makefuncs.h +0 -108
- data/ext/pg_query/include/nodes/memnodes.h +0 -108
- data/ext/pg_query/include/nodes/nodeFuncs.h +0 -162
- data/ext/pg_query/include/nodes/nodes.h +0 -842
- data/ext/pg_query/include/nodes/params.h +0 -170
- data/ext/pg_query/include/nodes/parsenodes.h +0 -3580
- data/ext/pg_query/include/nodes/pathnodes.h +0 -2557
- data/ext/pg_query/include/nodes/pg_list.h +0 -606
- data/ext/pg_query/include/nodes/plannodes.h +0 -1266
- data/ext/pg_query/include/nodes/primnodes.h +0 -1541
- data/ext/pg_query/include/nodes/print.h +0 -34
- data/ext/pg_query/include/nodes/tidbitmap.h +0 -75
- data/ext/pg_query/include/nodes/value.h +0 -61
- data/ext/pg_query/include/optimizer/cost.h +0 -206
- data/ext/pg_query/include/optimizer/geqo.h +0 -88
- data/ext/pg_query/include/optimizer/geqo_gene.h +0 -45
- data/ext/pg_query/include/optimizer/optimizer.h +0 -194
- data/ext/pg_query/include/optimizer/paths.h +0 -257
- data/ext/pg_query/include/optimizer/planmain.h +0 -119
- data/ext/pg_query/include/parser/analyze.h +0 -49
- data/ext/pg_query/include/parser/gram.h +0 -1067
- data/ext/pg_query/include/parser/gramparse.h +0 -75
- data/ext/pg_query/include/parser/kwlist.h +0 -477
- data/ext/pg_query/include/parser/parse_agg.h +0 -68
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_coerce.h +0 -98
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_expr.h +0 -26
- data/ext/pg_query/include/parser/parse_func.h +0 -73
- data/ext/pg_query/include/parser/parse_node.h +0 -327
- data/ext/pg_query/include/parser/parse_oper.h +0 -67
- data/ext/pg_query/include/parser/parse_relation.h +0 -123
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/include/parser/parse_type.h +0 -60
- data/ext/pg_query/include/parser/parser.h +0 -41
- data/ext/pg_query/include/parser/parsetree.h +0 -61
- data/ext/pg_query/include/parser/scanner.h +0 -152
- data/ext/pg_query/include/parser/scansup.h +0 -30
- data/ext/pg_query/include/partitioning/partdefs.h +0 -26
- data/ext/pg_query/include/pg_config.h +0 -995
- data/ext/pg_query/include/pg_config_manual.h +0 -357
- data/ext/pg_query/include/pg_config_os.h +0 -8
- data/ext/pg_query/include/pg_getopt.h +0 -56
- data/ext/pg_query/include/pg_trace.h +0 -17
- data/ext/pg_query/include/pgstat.h +0 -1488
- data/ext/pg_query/include/pgtime.h +0 -84
- data/ext/pg_query/include/pl_gram.h +0 -385
- data/ext/pg_query/include/pl_reserved_kwlist.h +0 -52
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +0 -114
- data/ext/pg_query/include/pl_unreserved_kwlist.h +0 -112
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +0 -246
- data/ext/pg_query/include/plerrcodes.h +0 -990
- data/ext/pg_query/include/plpgsql.h +0 -1347
- data/ext/pg_query/include/port/atomics/arch-arm.h +0 -26
- data/ext/pg_query/include/port/atomics/arch-ppc.h +0 -254
- data/ext/pg_query/include/port/atomics/arch-x86.h +0 -252
- data/ext/pg_query/include/port/atomics/fallback.h +0 -170
- data/ext/pg_query/include/port/atomics/generic-gcc.h +0 -286
- data/ext/pg_query/include/port/atomics/generic.h +0 -401
- data/ext/pg_query/include/port/atomics.h +0 -524
- data/ext/pg_query/include/port/pg_bitutils.h +0 -272
- data/ext/pg_query/include/port/pg_bswap.h +0 -161
- data/ext/pg_query/include/port/pg_crc32c.h +0 -101
- data/ext/pg_query/include/port.h +0 -528
- data/ext/pg_query/include/portability/instr_time.h +0 -256
- data/ext/pg_query/include/postgres.h +0 -764
- data/ext/pg_query/include/postgres_ext.h +0 -74
- data/ext/pg_query/include/postmaster/autovacuum.h +0 -83
- data/ext/pg_query/include/postmaster/bgworker.h +0 -161
- data/ext/pg_query/include/postmaster/bgworker_internals.h +0 -64
- data/ext/pg_query/include/postmaster/bgwriter.h +0 -45
- data/ext/pg_query/include/postmaster/fork_process.h +0 -17
- data/ext/pg_query/include/postmaster/interrupt.h +0 -32
- data/ext/pg_query/include/postmaster/pgarch.h +0 -39
- data/ext/pg_query/include/postmaster/postmaster.h +0 -77
- data/ext/pg_query/include/postmaster/syslogger.h +0 -98
- data/ext/pg_query/include/postmaster/walwriter.h +0 -21
- data/ext/pg_query/include/regex/regex.h +0 -184
- data/ext/pg_query/include/replication/logicallauncher.h +0 -31
- data/ext/pg_query/include/replication/logicalproto.h +0 -110
- data/ext/pg_query/include/replication/logicalworker.h +0 -19
- data/ext/pg_query/include/replication/origin.h +0 -73
- data/ext/pg_query/include/replication/reorderbuffer.h +0 -468
- data/ext/pg_query/include/replication/slot.h +0 -219
- data/ext/pg_query/include/replication/syncrep.h +0 -115
- data/ext/pg_query/include/replication/walreceiver.h +0 -340
- data/ext/pg_query/include/replication/walsender.h +0 -74
- data/ext/pg_query/include/rewrite/prs2lock.h +0 -46
- data/ext/pg_query/include/rewrite/rewriteHandler.h +0 -40
- data/ext/pg_query/include/rewrite/rewriteManip.h +0 -87
- data/ext/pg_query/include/rewrite/rewriteSupport.h +0 -26
- data/ext/pg_query/include/storage/backendid.h +0 -37
- data/ext/pg_query/include/storage/block.h +0 -121
- data/ext/pg_query/include/storage/buf.h +0 -46
- data/ext/pg_query/include/storage/bufmgr.h +0 -292
- data/ext/pg_query/include/storage/bufpage.h +0 -459
- data/ext/pg_query/include/storage/condition_variable.h +0 -62
- data/ext/pg_query/include/storage/dsm.h +0 -61
- data/ext/pg_query/include/storage/dsm_impl.h +0 -75
- data/ext/pg_query/include/storage/fd.h +0 -168
- data/ext/pg_query/include/storage/ipc.h +0 -81
- data/ext/pg_query/include/storage/item.h +0 -19
- data/ext/pg_query/include/storage/itemid.h +0 -184
- data/ext/pg_query/include/storage/itemptr.h +0 -206
- data/ext/pg_query/include/storage/large_object.h +0 -100
- data/ext/pg_query/include/storage/latch.h +0 -190
- data/ext/pg_query/include/storage/lmgr.h +0 -114
- data/ext/pg_query/include/storage/lock.h +0 -613
- data/ext/pg_query/include/storage/lockdefs.h +0 -59
- data/ext/pg_query/include/storage/lwlock.h +0 -233
- data/ext/pg_query/include/storage/lwlocknames.h +0 -51
- data/ext/pg_query/include/storage/off.h +0 -57
- data/ext/pg_query/include/storage/pg_sema.h +0 -61
- data/ext/pg_query/include/storage/pg_shmem.h +0 -90
- data/ext/pg_query/include/storage/pmsignal.h +0 -94
- data/ext/pg_query/include/storage/predicate.h +0 -87
- data/ext/pg_query/include/storage/proc.h +0 -347
- data/ext/pg_query/include/storage/proclist_types.h +0 -51
- data/ext/pg_query/include/storage/procsignal.h +0 -75
- data/ext/pg_query/include/storage/relfilenode.h +0 -99
- data/ext/pg_query/include/storage/s_lock.h +0 -1071
- data/ext/pg_query/include/storage/sharedfileset.h +0 -45
- data/ext/pg_query/include/storage/shm_mq.h +0 -85
- data/ext/pg_query/include/storage/shm_toc.h +0 -58
- data/ext/pg_query/include/storage/shmem.h +0 -81
- data/ext/pg_query/include/storage/sinval.h +0 -153
- data/ext/pg_query/include/storage/sinvaladt.h +0 -43
- data/ext/pg_query/include/storage/smgr.h +0 -109
- data/ext/pg_query/include/storage/spin.h +0 -77
- data/ext/pg_query/include/storage/standby.h +0 -91
- data/ext/pg_query/include/storage/standbydefs.h +0 -74
- data/ext/pg_query/include/storage/sync.h +0 -62
- data/ext/pg_query/include/tcop/cmdtag.h +0 -58
- data/ext/pg_query/include/tcop/cmdtaglist.h +0 -217
- data/ext/pg_query/include/tcop/deparse_utility.h +0 -108
- data/ext/pg_query/include/tcop/dest.h +0 -149
- data/ext/pg_query/include/tcop/fastpath.h +0 -21
- data/ext/pg_query/include/tcop/pquery.h +0 -51
- data/ext/pg_query/include/tcop/tcopprot.h +0 -89
- data/ext/pg_query/include/tcop/utility.h +0 -108
- data/ext/pg_query/include/tsearch/ts_cache.h +0 -98
- data/ext/pg_query/include/utils/acl.h +0 -312
- data/ext/pg_query/include/utils/aclchk_internal.h +0 -45
- data/ext/pg_query/include/utils/array.h +0 -459
- data/ext/pg_query/include/utils/builtins.h +0 -128
- data/ext/pg_query/include/utils/bytea.h +0 -27
- data/ext/pg_query/include/utils/catcache.h +0 -231
- data/ext/pg_query/include/utils/date.h +0 -90
- data/ext/pg_query/include/utils/datetime.h +0 -343
- data/ext/pg_query/include/utils/datum.h +0 -68
- data/ext/pg_query/include/utils/dsa.h +0 -123
- data/ext/pg_query/include/utils/dynahash.h +0 -19
- data/ext/pg_query/include/utils/elog.h +0 -439
- data/ext/pg_query/include/utils/errcodes.h +0 -352
- data/ext/pg_query/include/utils/expandeddatum.h +0 -159
- data/ext/pg_query/include/utils/expandedrecord.h +0 -231
- data/ext/pg_query/include/utils/float.h +0 -356
- data/ext/pg_query/include/utils/fmgroids.h +0 -2657
- data/ext/pg_query/include/utils/fmgrprotos.h +0 -2646
- data/ext/pg_query/include/utils/fmgrtab.h +0 -48
- data/ext/pg_query/include/utils/guc.h +0 -443
- data/ext/pg_query/include/utils/guc_tables.h +0 -272
- data/ext/pg_query/include/utils/hsearch.h +0 -149
- data/ext/pg_query/include/utils/inval.h +0 -65
- data/ext/pg_query/include/utils/lsyscache.h +0 -198
- data/ext/pg_query/include/utils/memdebug.h +0 -82
- data/ext/pg_query/include/utils/memutils.h +0 -225
- data/ext/pg_query/include/utils/numeric.h +0 -76
- data/ext/pg_query/include/utils/palloc.h +0 -136
- data/ext/pg_query/include/utils/partcache.h +0 -102
- data/ext/pg_query/include/utils/pg_locale.h +0 -119
- data/ext/pg_query/include/utils/pg_lsn.h +0 -29
- data/ext/pg_query/include/utils/pidfile.h +0 -56
- data/ext/pg_query/include/utils/plancache.h +0 -235
- data/ext/pg_query/include/utils/portal.h +0 -254
- data/ext/pg_query/include/utils/probes.h +0 -114
- data/ext/pg_query/include/utils/ps_status.h +0 -25
- data/ext/pg_query/include/utils/queryenvironment.h +0 -74
- data/ext/pg_query/include/utils/regproc.h +0 -28
- data/ext/pg_query/include/utils/rel.h +0 -643
- data/ext/pg_query/include/utils/relcache.h +0 -150
- data/ext/pg_query/include/utils/reltrigger.h +0 -81
- data/ext/pg_query/include/utils/resowner.h +0 -86
- data/ext/pg_query/include/utils/rls.h +0 -50
- data/ext/pg_query/include/utils/ruleutils.h +0 -44
- data/ext/pg_query/include/utils/sharedtuplestore.h +0 -61
- data/ext/pg_query/include/utils/snapmgr.h +0 -159
- data/ext/pg_query/include/utils/snapshot.h +0 -206
- data/ext/pg_query/include/utils/sortsupport.h +0 -276
- data/ext/pg_query/include/utils/syscache.h +0 -219
- data/ext/pg_query/include/utils/timeout.h +0 -88
- data/ext/pg_query/include/utils/timestamp.h +0 -116
- data/ext/pg_query/include/utils/tuplesort.h +0 -277
- data/ext/pg_query/include/utils/tuplestore.h +0 -91
- data/ext/pg_query/include/utils/typcache.h +0 -202
- data/ext/pg_query/include/utils/tzparser.h +0 -39
- data/ext/pg_query/include/utils/varlena.h +0 -39
- data/ext/pg_query/include/utils/xml.h +0 -84
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
- data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1832
- data/ext/pg_query/src_common_string.c +0 -86
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_pgsleep.c +0 -69
- data/ext/pg_query/src_port_random.c +0 -31
- data/ext/pg_query/src_port_strnlen.c +0 -39
- /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
- /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -2,24 +2,27 @@
|
|
2
2
|
* Symbols referenced in this file:
|
3
3
|
* - pg_encoding_max_length
|
4
4
|
* - pg_wchar_table
|
5
|
-
* -
|
5
|
+
* - pg_utf_mblen_private
|
6
6
|
* - pg_mule_mblen
|
7
7
|
* - pg_ascii2wchar_with_len
|
8
8
|
* - pg_wchar2single_with_len
|
9
9
|
* - pg_ascii_mblen
|
10
10
|
* - pg_ascii_dsplen
|
11
|
-
* -
|
11
|
+
* - pg_ascii_verifychar
|
12
|
+
* - pg_ascii_verifystr
|
12
13
|
* - pg_eucjp2wchar_with_len
|
13
14
|
* - pg_euc2wchar_with_len
|
14
15
|
* - pg_wchar2euc_with_len
|
15
16
|
* - pg_eucjp_mblen
|
16
17
|
* - pg_euc_mblen
|
17
18
|
* - pg_eucjp_dsplen
|
18
|
-
* -
|
19
|
+
* - pg_eucjp_verifychar
|
20
|
+
* - pg_eucjp_verifystr
|
19
21
|
* - pg_euccn2wchar_with_len
|
20
22
|
* - pg_euccn_mblen
|
21
23
|
* - pg_euccn_dsplen
|
22
|
-
* -
|
24
|
+
* - pg_euckr_verifychar
|
25
|
+
* - pg_euckr_verifystr
|
23
26
|
* - pg_euckr2wchar_with_len
|
24
27
|
* - pg_euckr_mblen
|
25
28
|
* - pg_euckr_dsplen
|
@@ -27,42 +30,52 @@
|
|
27
30
|
* - pg_euctw2wchar_with_len
|
28
31
|
* - pg_euctw_mblen
|
29
32
|
* - pg_euctw_dsplen
|
30
|
-
* -
|
33
|
+
* - pg_euctw_verifychar
|
34
|
+
* - pg_euctw_verifystr
|
31
35
|
* - pg_utf2wchar_with_len
|
32
36
|
* - pg_wchar2utf_with_len
|
33
|
-
* - unicode_to_utf8
|
34
37
|
* - pg_utf_dsplen
|
35
|
-
* - utf8_to_unicode
|
36
38
|
* - ucs_wcwidth
|
37
39
|
* - mbbisearch
|
38
|
-
* -
|
40
|
+
* - pg_utf8_verifychar
|
39
41
|
* - pg_utf8_islegal
|
42
|
+
* - pg_utf8_verifystr
|
43
|
+
* - utf8_advance
|
44
|
+
* - Utf8Transition
|
40
45
|
* - pg_mule2wchar_with_len
|
41
46
|
* - pg_wchar2mule_with_len
|
42
47
|
* - pg_mule_dsplen
|
43
|
-
* -
|
48
|
+
* - pg_mule_verifychar
|
49
|
+
* - pg_mule_verifystr
|
44
50
|
* - pg_latin12wchar_with_len
|
45
51
|
* - pg_latin1_mblen
|
46
52
|
* - pg_latin1_dsplen
|
47
|
-
* -
|
53
|
+
* - pg_latin1_verifychar
|
54
|
+
* - pg_latin1_verifystr
|
48
55
|
* - pg_sjis_mblen
|
49
56
|
* - pg_sjis_dsplen
|
50
|
-
* -
|
57
|
+
* - pg_sjis_verifychar
|
58
|
+
* - pg_sjis_verifystr
|
51
59
|
* - pg_big5_mblen
|
52
60
|
* - pg_big5_dsplen
|
53
|
-
* -
|
61
|
+
* - pg_big5_verifychar
|
62
|
+
* - pg_big5_verifystr
|
54
63
|
* - pg_gbk_mblen
|
55
64
|
* - pg_gbk_dsplen
|
56
|
-
* -
|
65
|
+
* - pg_gbk_verifychar
|
66
|
+
* - pg_gbk_verifystr
|
57
67
|
* - pg_uhc_mblen
|
58
68
|
* - pg_uhc_dsplen
|
59
|
-
* -
|
69
|
+
* - pg_uhc_verifychar
|
70
|
+
* - pg_uhc_verifystr
|
60
71
|
* - pg_gb18030_mblen
|
61
72
|
* - pg_gb18030_dsplen
|
62
|
-
* -
|
73
|
+
* - pg_gb18030_verifychar
|
74
|
+
* - pg_gb18030_verifystr
|
63
75
|
* - pg_johab_mblen
|
64
76
|
* - pg_johab_dsplen
|
65
|
-
* -
|
77
|
+
* - pg_johab_verifychar
|
78
|
+
* - pg_johab_verifystr
|
66
79
|
* - pg_encoding_mblen
|
67
80
|
*--------------------------------------------------------------------
|
68
81
|
*/
|
@@ -72,7 +85,7 @@
|
|
72
85
|
* wchar.c
|
73
86
|
* Functions for working with multibyte characters in various encodings.
|
74
87
|
*
|
75
|
-
* Portions Copyright (c) 1998-
|
88
|
+
* Portions Copyright (c) 1998-2024, PostgreSQL Global Development Group
|
76
89
|
*
|
77
90
|
* IDENTIFICATION
|
78
91
|
* src/common/wchar.c
|
@@ -82,15 +95,35 @@
|
|
82
95
|
#include "c.h"
|
83
96
|
|
84
97
|
#include "mb/pg_wchar.h"
|
98
|
+
#include "utils/ascii.h"
|
99
|
+
|
100
|
+
|
101
|
+
/*
|
102
|
+
* In today's multibyte encodings other than UTF8, this two-byte sequence
|
103
|
+
* ensures pg_encoding_mblen() == 2 && pg_encoding_verifymbstr() == 0.
|
104
|
+
*
|
105
|
+
* For historical reasons, several verifychar implementations opt to reject
|
106
|
+
* this pair specifically. Byte pair range constraints, in encoding
|
107
|
+
* originator documentation, always excluded this pair. No core conversion
|
108
|
+
* could translate it. However, longstanding verifychar implementations
|
109
|
+
* accepted any non-NUL byte. big5_to_euc_tw and big5_to_mic even translate
|
110
|
+
* pairs not valid per encoding originator documentation. To avoid tightening
|
111
|
+
* core or non-core conversions in a security patch, we sought this one pair.
|
112
|
+
*
|
113
|
+
* PQescapeString() historically used spaces for BYTE1; many other values
|
114
|
+
* could suffice for BYTE1.
|
115
|
+
*/
|
116
|
+
#define NONUTF8_INVALID_BYTE0 (0x8d)
|
117
|
+
#define NONUTF8_INVALID_BYTE1 (' ')
|
85
118
|
|
86
119
|
|
87
120
|
/*
|
88
121
|
* Operations on multi-byte encodings are driven by a table of helper
|
89
122
|
* functions.
|
90
123
|
*
|
91
|
-
* To add an encoding support, define mblen(), dsplen()
|
92
|
-
* the encoding. For server-encodings, also define mb2wchar()
|
93
|
-
* conversion functions.
|
124
|
+
* To add an encoding support, define mblen(), dsplen(), verifychar() and
|
125
|
+
* verifystr() for the encoding. For server-encodings, also define mb2wchar()
|
126
|
+
* and wchar2mb() conversion functions.
|
94
127
|
*
|
95
128
|
* These functions generally assume that their input is validly formed.
|
96
129
|
* The "verifier" functions, further down in the file, have to be more
|
@@ -544,39 +577,6 @@ pg_utf2wchar_with_len(const unsigned char *from, pg_wchar *to, int len)
|
|
544
577
|
}
|
545
578
|
|
546
579
|
|
547
|
-
/*
|
548
|
-
* Map a Unicode code point to UTF-8. utf8string must have 4 bytes of
|
549
|
-
* space allocated.
|
550
|
-
*/
|
551
|
-
unsigned char *
|
552
|
-
unicode_to_utf8(pg_wchar c, unsigned char *utf8string)
|
553
|
-
{
|
554
|
-
if (c <= 0x7F)
|
555
|
-
{
|
556
|
-
utf8string[0] = c;
|
557
|
-
}
|
558
|
-
else if (c <= 0x7FF)
|
559
|
-
{
|
560
|
-
utf8string[0] = 0xC0 | ((c >> 6) & 0x1F);
|
561
|
-
utf8string[1] = 0x80 | (c & 0x3F);
|
562
|
-
}
|
563
|
-
else if (c <= 0xFFFF)
|
564
|
-
{
|
565
|
-
utf8string[0] = 0xE0 | ((c >> 12) & 0x0F);
|
566
|
-
utf8string[1] = 0x80 | ((c >> 6) & 0x3F);
|
567
|
-
utf8string[2] = 0x80 | (c & 0x3F);
|
568
|
-
}
|
569
|
-
else
|
570
|
-
{
|
571
|
-
utf8string[0] = 0xF0 | ((c >> 18) & 0x07);
|
572
|
-
utf8string[1] = 0x80 | ((c >> 12) & 0x3F);
|
573
|
-
utf8string[2] = 0x80 | ((c >> 6) & 0x3F);
|
574
|
-
utf8string[3] = 0x80 | (c & 0x3F);
|
575
|
-
}
|
576
|
-
|
577
|
-
return utf8string;
|
578
|
-
}
|
579
|
-
|
580
580
|
/*
|
581
581
|
* Trivial conversion from pg_wchar to UTF-8.
|
582
582
|
* caller should allocate enough space for "to"
|
@@ -652,8 +652,8 @@ pg_utf_mblen(const unsigned char *s)
|
|
652
652
|
|
653
653
|
struct mbinterval
|
654
654
|
{
|
655
|
-
unsigned
|
656
|
-
unsigned
|
655
|
+
unsigned int first;
|
656
|
+
unsigned int last;
|
657
657
|
};
|
658
658
|
|
659
659
|
/* auxiliary function for binary search in interval table */
|
@@ -689,15 +689,9 @@ mbbisearch(pg_wchar ucs, const struct mbinterval *table, int max)
|
|
689
689
|
* value of -1.
|
690
690
|
*
|
691
691
|
* - Non-spacing and enclosing combining characters (general
|
692
|
-
* category code Mn or
|
692
|
+
* category code Mn, Me or Cf in the Unicode database) have a
|
693
693
|
* column width of 0.
|
694
694
|
*
|
695
|
-
* - Other format characters (general category code Cf in the Unicode
|
696
|
-
* database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.
|
697
|
-
*
|
698
|
-
* - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
|
699
|
-
* have a column width of 0.
|
700
|
-
*
|
701
695
|
* - Spacing characters in the East Asian Wide (W) or East Asian
|
702
696
|
* FullWidth (F) category as defined in Unicode Technical
|
703
697
|
* Report #11 have a column width of 2.
|
@@ -713,7 +707,8 @@ mbbisearch(pg_wchar ucs, const struct mbinterval *table, int max)
|
|
713
707
|
static int
|
714
708
|
ucs_wcwidth(pg_wchar ucs)
|
715
709
|
{
|
716
|
-
#include "common/
|
710
|
+
#include "common/unicode_nonspacing_table.h"
|
711
|
+
#include "common/unicode_east_asian_fw_table.h"
|
717
712
|
|
718
713
|
/* test for 8-bit control characters */
|
719
714
|
if (ucs == 0)
|
@@ -722,55 +717,25 @@ ucs_wcwidth(pg_wchar ucs)
|
|
722
717
|
if (ucs < 0x20 || (ucs >= 0x7f && ucs < 0xa0) || ucs > 0x0010ffff)
|
723
718
|
return -1;
|
724
719
|
|
725
|
-
/* binary search in table of non-spacing characters */
|
726
|
-
if (mbbisearch(ucs, combining,
|
727
|
-
sizeof(combining) / sizeof(struct mbinterval) - 1))
|
728
|
-
return 0;
|
729
|
-
|
730
720
|
/*
|
731
|
-
*
|
721
|
+
* binary search in table of non-spacing characters
|
722
|
+
*
|
723
|
+
* XXX: In the official Unicode sources, it is possible for a character to
|
724
|
+
* be described as both non-spacing and wide at the same time. As of
|
725
|
+
* Unicode 13.0, treating the non-spacing property as the determining
|
726
|
+
* factor for display width leads to the correct behavior, so do that
|
727
|
+
* search first.
|
732
728
|
*/
|
729
|
+
if (mbbisearch(ucs, nonspacing,
|
730
|
+
sizeof(nonspacing) / sizeof(struct mbinterval) - 1))
|
731
|
+
return 0;
|
733
732
|
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
ucs != 0x303f) || /* CJK ... Yi */
|
739
|
-
(ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
|
740
|
-
(ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility
|
741
|
-
* Ideographs */
|
742
|
-
(ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
|
743
|
-
(ucs >= 0xff00 && ucs <= 0xff5f) || /* Fullwidth Forms */
|
744
|
-
(ucs >= 0xffe0 && ucs <= 0xffe6) ||
|
745
|
-
(ucs >= 0x20000 && ucs <= 0x2ffff)));
|
746
|
-
}
|
733
|
+
/* binary search in table of wide characters */
|
734
|
+
if (mbbisearch(ucs, east_asian_fw,
|
735
|
+
sizeof(east_asian_fw) / sizeof(struct mbinterval) - 1))
|
736
|
+
return 2;
|
747
737
|
|
748
|
-
|
749
|
-
* Convert a UTF-8 character to a Unicode code point.
|
750
|
-
* This is a one-character version of pg_utf2wchar_with_len.
|
751
|
-
*
|
752
|
-
* No error checks here, c must point to a long-enough string.
|
753
|
-
*/
|
754
|
-
pg_wchar
|
755
|
-
utf8_to_unicode(const unsigned char *c)
|
756
|
-
{
|
757
|
-
if ((*c & 0x80) == 0)
|
758
|
-
return (pg_wchar) c[0];
|
759
|
-
else if ((*c & 0xe0) == 0xc0)
|
760
|
-
return (pg_wchar) (((c[0] & 0x1f) << 6) |
|
761
|
-
(c[1] & 0x3f));
|
762
|
-
else if ((*c & 0xf0) == 0xe0)
|
763
|
-
return (pg_wchar) (((c[0] & 0x0f) << 12) |
|
764
|
-
((c[1] & 0x3f) << 6) |
|
765
|
-
(c[2] & 0x3f));
|
766
|
-
else if ((*c & 0xf8) == 0xf0)
|
767
|
-
return (pg_wchar) (((c[0] & 0x07) << 18) |
|
768
|
-
((c[1] & 0x3f) << 12) |
|
769
|
-
((c[2] & 0x3f) << 6) |
|
770
|
-
(c[3] & 0x3f));
|
771
|
-
else
|
772
|
-
/* that is an invalid code on purpose */
|
773
|
-
return 0xffffffff;
|
738
|
+
return 1;
|
774
739
|
}
|
775
740
|
|
776
741
|
static int
|
@@ -1156,29 +1121,45 @@ pg_gb18030_dsplen(const unsigned char *s)
|
|
1156
1121
|
*-------------------------------------------------------------------
|
1157
1122
|
* multibyte sequence validators
|
1158
1123
|
*
|
1159
|
-
*
|
1160
|
-
* and "len", the remaining length of the string. If there is a
|
1161
|
-
* encoded character beginning at *s, return its length in bytes;
|
1162
|
-
* return -1.
|
1124
|
+
* The verifychar functions accept "s", a pointer to the first byte of a
|
1125
|
+
* string, and "len", the remaining length of the string. If there is a
|
1126
|
+
* validly encoded character beginning at *s, return its length in bytes;
|
1127
|
+
* else return -1.
|
1163
1128
|
*
|
1164
|
-
* The functions
|
1165
|
-
*
|
1129
|
+
* The verifystr functions also accept "s", a pointer to a string and "len",
|
1130
|
+
* the length of the string. They verify the whole string, and return the
|
1131
|
+
* number of input bytes (<= len) that are valid. In other words, if the
|
1132
|
+
* whole string is valid, verifystr returns "len", otherwise it returns the
|
1133
|
+
* byte offset of the first invalid character. The verifystr functions must
|
1134
|
+
* test for and reject zeroes in the input.
|
1166
1135
|
*
|
1167
|
-
*
|
1168
|
-
*
|
1136
|
+
* The verifychar functions can assume that len > 0 and that *s != '\0', but
|
1137
|
+
* they must test for and reject zeroes in any additional bytes of a
|
1138
|
+
* multibyte character. Note that this definition allows the function for a
|
1139
|
+
* single-byte encoding to be just "return 1".
|
1169
1140
|
*-------------------------------------------------------------------
|
1170
1141
|
*/
|
1171
|
-
|
1172
1142
|
static int
|
1173
|
-
|
1143
|
+
pg_ascii_verifychar(const unsigned char *s, int len)
|
1174
1144
|
{
|
1175
1145
|
return 1;
|
1176
1146
|
}
|
1177
1147
|
|
1148
|
+
static int
|
1149
|
+
pg_ascii_verifystr(const unsigned char *s, int len)
|
1150
|
+
{
|
1151
|
+
const unsigned char *nullpos = memchr(s, 0, len);
|
1152
|
+
|
1153
|
+
if (nullpos == NULL)
|
1154
|
+
return len;
|
1155
|
+
else
|
1156
|
+
return nullpos - s;
|
1157
|
+
}
|
1158
|
+
|
1178
1159
|
#define IS_EUC_RANGE_VALID(c) ((c) >= 0xa1 && (c) <= 0xfe)
|
1179
1160
|
|
1180
1161
|
static int
|
1181
|
-
|
1162
|
+
pg_eucjp_verifychar(const unsigned char *s, int len)
|
1182
1163
|
{
|
1183
1164
|
int l;
|
1184
1165
|
unsigned char c1,
|
@@ -1233,7 +1214,36 @@ pg_eucjp_verifier(const unsigned char *s, int len)
|
|
1233
1214
|
}
|
1234
1215
|
|
1235
1216
|
static int
|
1236
|
-
|
1217
|
+
pg_eucjp_verifystr(const unsigned char *s, int len)
|
1218
|
+
{
|
1219
|
+
const unsigned char *start = s;
|
1220
|
+
|
1221
|
+
while (len > 0)
|
1222
|
+
{
|
1223
|
+
int l;
|
1224
|
+
|
1225
|
+
/* fast path for ASCII-subset characters */
|
1226
|
+
if (!IS_HIGHBIT_SET(*s))
|
1227
|
+
{
|
1228
|
+
if (*s == '\0')
|
1229
|
+
break;
|
1230
|
+
l = 1;
|
1231
|
+
}
|
1232
|
+
else
|
1233
|
+
{
|
1234
|
+
l = pg_eucjp_verifychar(s, len);
|
1235
|
+
if (l == -1)
|
1236
|
+
break;
|
1237
|
+
}
|
1238
|
+
s += l;
|
1239
|
+
len -= l;
|
1240
|
+
}
|
1241
|
+
|
1242
|
+
return s - start;
|
1243
|
+
}
|
1244
|
+
|
1245
|
+
static int
|
1246
|
+
pg_euckr_verifychar(const unsigned char *s, int len)
|
1237
1247
|
{
|
1238
1248
|
int l;
|
1239
1249
|
unsigned char c1,
|
@@ -1261,11 +1271,41 @@ pg_euckr_verifier(const unsigned char *s, int len)
|
|
1261
1271
|
return l;
|
1262
1272
|
}
|
1263
1273
|
|
1274
|
+
static int
|
1275
|
+
pg_euckr_verifystr(const unsigned char *s, int len)
|
1276
|
+
{
|
1277
|
+
const unsigned char *start = s;
|
1278
|
+
|
1279
|
+
while (len > 0)
|
1280
|
+
{
|
1281
|
+
int l;
|
1282
|
+
|
1283
|
+
/* fast path for ASCII-subset characters */
|
1284
|
+
if (!IS_HIGHBIT_SET(*s))
|
1285
|
+
{
|
1286
|
+
if (*s == '\0')
|
1287
|
+
break;
|
1288
|
+
l = 1;
|
1289
|
+
}
|
1290
|
+
else
|
1291
|
+
{
|
1292
|
+
l = pg_euckr_verifychar(s, len);
|
1293
|
+
if (l == -1)
|
1294
|
+
break;
|
1295
|
+
}
|
1296
|
+
s += l;
|
1297
|
+
len -= l;
|
1298
|
+
}
|
1299
|
+
|
1300
|
+
return s - start;
|
1301
|
+
}
|
1302
|
+
|
1264
1303
|
/* EUC-CN byte sequences are exactly same as EUC-KR */
|
1265
|
-
#define
|
1304
|
+
#define pg_euccn_verifychar pg_euckr_verifychar
|
1305
|
+
#define pg_euccn_verifystr pg_euckr_verifystr
|
1266
1306
|
|
1267
1307
|
static int
|
1268
|
-
|
1308
|
+
pg_euctw_verifychar(const unsigned char *s, int len)
|
1269
1309
|
{
|
1270
1310
|
int l;
|
1271
1311
|
unsigned char c1,
|
@@ -1315,7 +1355,36 @@ pg_euctw_verifier(const unsigned char *s, int len)
|
|
1315
1355
|
}
|
1316
1356
|
|
1317
1357
|
static int
|
1318
|
-
|
1358
|
+
pg_euctw_verifystr(const unsigned char *s, int len)
|
1359
|
+
{
|
1360
|
+
const unsigned char *start = s;
|
1361
|
+
|
1362
|
+
while (len > 0)
|
1363
|
+
{
|
1364
|
+
int l;
|
1365
|
+
|
1366
|
+
/* fast path for ASCII-subset characters */
|
1367
|
+
if (!IS_HIGHBIT_SET(*s))
|
1368
|
+
{
|
1369
|
+
if (*s == '\0')
|
1370
|
+
break;
|
1371
|
+
l = 1;
|
1372
|
+
}
|
1373
|
+
else
|
1374
|
+
{
|
1375
|
+
l = pg_euctw_verifychar(s, len);
|
1376
|
+
if (l == -1)
|
1377
|
+
break;
|
1378
|
+
}
|
1379
|
+
s += l;
|
1380
|
+
len -= l;
|
1381
|
+
}
|
1382
|
+
|
1383
|
+
return s - start;
|
1384
|
+
}
|
1385
|
+
|
1386
|
+
static int
|
1387
|
+
pg_johab_verifychar(const unsigned char *s, int len)
|
1319
1388
|
{
|
1320
1389
|
int l,
|
1321
1390
|
mbl;
|
@@ -1339,7 +1408,36 @@ pg_johab_verifier(const unsigned char *s, int len)
|
|
1339
1408
|
}
|
1340
1409
|
|
1341
1410
|
static int
|
1342
|
-
|
1411
|
+
pg_johab_verifystr(const unsigned char *s, int len)
|
1412
|
+
{
|
1413
|
+
const unsigned char *start = s;
|
1414
|
+
|
1415
|
+
while (len > 0)
|
1416
|
+
{
|
1417
|
+
int l;
|
1418
|
+
|
1419
|
+
/* fast path for ASCII-subset characters */
|
1420
|
+
if (!IS_HIGHBIT_SET(*s))
|
1421
|
+
{
|
1422
|
+
if (*s == '\0')
|
1423
|
+
break;
|
1424
|
+
l = 1;
|
1425
|
+
}
|
1426
|
+
else
|
1427
|
+
{
|
1428
|
+
l = pg_johab_verifychar(s, len);
|
1429
|
+
if (l == -1)
|
1430
|
+
break;
|
1431
|
+
}
|
1432
|
+
s += l;
|
1433
|
+
len -= l;
|
1434
|
+
}
|
1435
|
+
|
1436
|
+
return s - start;
|
1437
|
+
}
|
1438
|
+
|
1439
|
+
static int
|
1440
|
+
pg_mule_verifychar(const unsigned char *s, int len)
|
1343
1441
|
{
|
1344
1442
|
int l,
|
1345
1443
|
mbl;
|
@@ -1360,13 +1458,53 @@ pg_mule_verifier(const unsigned char *s, int len)
|
|
1360
1458
|
}
|
1361
1459
|
|
1362
1460
|
static int
|
1363
|
-
|
1461
|
+
pg_mule_verifystr(const unsigned char *s, int len)
|
1462
|
+
{
|
1463
|
+
const unsigned char *start = s;
|
1464
|
+
|
1465
|
+
while (len > 0)
|
1466
|
+
{
|
1467
|
+
int l;
|
1468
|
+
|
1469
|
+
/* fast path for ASCII-subset characters */
|
1470
|
+
if (!IS_HIGHBIT_SET(*s))
|
1471
|
+
{
|
1472
|
+
if (*s == '\0')
|
1473
|
+
break;
|
1474
|
+
l = 1;
|
1475
|
+
}
|
1476
|
+
else
|
1477
|
+
{
|
1478
|
+
l = pg_mule_verifychar(s, len);
|
1479
|
+
if (l == -1)
|
1480
|
+
break;
|
1481
|
+
}
|
1482
|
+
s += l;
|
1483
|
+
len -= l;
|
1484
|
+
}
|
1485
|
+
|
1486
|
+
return s - start;
|
1487
|
+
}
|
1488
|
+
|
1489
|
+
static int
|
1490
|
+
pg_latin1_verifychar(const unsigned char *s, int len)
|
1364
1491
|
{
|
1365
1492
|
return 1;
|
1366
1493
|
}
|
1367
1494
|
|
1368
1495
|
static int
|
1369
|
-
|
1496
|
+
pg_latin1_verifystr(const unsigned char *s, int len)
|
1497
|
+
{
|
1498
|
+
const unsigned char *nullpos = memchr(s, 0, len);
|
1499
|
+
|
1500
|
+
if (nullpos == NULL)
|
1501
|
+
return len;
|
1502
|
+
else
|
1503
|
+
return nullpos - s;
|
1504
|
+
}
|
1505
|
+
|
1506
|
+
static int
|
1507
|
+
pg_sjis_verifychar(const unsigned char *s, int len)
|
1370
1508
|
{
|
1371
1509
|
int l,
|
1372
1510
|
mbl;
|
@@ -1389,7 +1527,36 @@ pg_sjis_verifier(const unsigned char *s, int len)
|
|
1389
1527
|
}
|
1390
1528
|
|
1391
1529
|
static int
|
1392
|
-
|
1530
|
+
pg_sjis_verifystr(const unsigned char *s, int len)
|
1531
|
+
{
|
1532
|
+
const unsigned char *start = s;
|
1533
|
+
|
1534
|
+
while (len > 0)
|
1535
|
+
{
|
1536
|
+
int l;
|
1537
|
+
|
1538
|
+
/* fast path for ASCII-subset characters */
|
1539
|
+
if (!IS_HIGHBIT_SET(*s))
|
1540
|
+
{
|
1541
|
+
if (*s == '\0')
|
1542
|
+
break;
|
1543
|
+
l = 1;
|
1544
|
+
}
|
1545
|
+
else
|
1546
|
+
{
|
1547
|
+
l = pg_sjis_verifychar(s, len);
|
1548
|
+
if (l == -1)
|
1549
|
+
break;
|
1550
|
+
}
|
1551
|
+
s += l;
|
1552
|
+
len -= l;
|
1553
|
+
}
|
1554
|
+
|
1555
|
+
return s - start;
|
1556
|
+
}
|
1557
|
+
|
1558
|
+
static int
|
1559
|
+
pg_big5_verifychar(const unsigned char *s, int len)
|
1393
1560
|
{
|
1394
1561
|
int l,
|
1395
1562
|
mbl;
|
@@ -1399,6 +1566,11 @@ pg_big5_verifier(const unsigned char *s, int len)
|
|
1399
1566
|
if (len < l)
|
1400
1567
|
return -1;
|
1401
1568
|
|
1569
|
+
if (l == 2 &&
|
1570
|
+
s[0] == NONUTF8_INVALID_BYTE0 &&
|
1571
|
+
s[1] == NONUTF8_INVALID_BYTE1)
|
1572
|
+
return -1;
|
1573
|
+
|
1402
1574
|
while (--l > 0)
|
1403
1575
|
{
|
1404
1576
|
if (*++s == '\0')
|
@@ -1409,7 +1581,36 @@ pg_big5_verifier(const unsigned char *s, int len)
|
|
1409
1581
|
}
|
1410
1582
|
|
1411
1583
|
static int
|
1412
|
-
|
1584
|
+
pg_big5_verifystr(const unsigned char *s, int len)
|
1585
|
+
{
|
1586
|
+
const unsigned char *start = s;
|
1587
|
+
|
1588
|
+
while (len > 0)
|
1589
|
+
{
|
1590
|
+
int l;
|
1591
|
+
|
1592
|
+
/* fast path for ASCII-subset characters */
|
1593
|
+
if (!IS_HIGHBIT_SET(*s))
|
1594
|
+
{
|
1595
|
+
if (*s == '\0')
|
1596
|
+
break;
|
1597
|
+
l = 1;
|
1598
|
+
}
|
1599
|
+
else
|
1600
|
+
{
|
1601
|
+
l = pg_big5_verifychar(s, len);
|
1602
|
+
if (l == -1)
|
1603
|
+
break;
|
1604
|
+
}
|
1605
|
+
s += l;
|
1606
|
+
len -= l;
|
1607
|
+
}
|
1608
|
+
|
1609
|
+
return s - start;
|
1610
|
+
}
|
1611
|
+
|
1612
|
+
static int
|
1613
|
+
pg_gbk_verifychar(const unsigned char *s, int len)
|
1413
1614
|
{
|
1414
1615
|
int l,
|
1415
1616
|
mbl;
|
@@ -1419,6 +1620,11 @@ pg_gbk_verifier(const unsigned char *s, int len)
|
|
1419
1620
|
if (len < l)
|
1420
1621
|
return -1;
|
1421
1622
|
|
1623
|
+
if (l == 2 &&
|
1624
|
+
s[0] == NONUTF8_INVALID_BYTE0 &&
|
1625
|
+
s[1] == NONUTF8_INVALID_BYTE1)
|
1626
|
+
return -1;
|
1627
|
+
|
1422
1628
|
while (--l > 0)
|
1423
1629
|
{
|
1424
1630
|
if (*++s == '\0')
|
@@ -1429,7 +1635,36 @@ pg_gbk_verifier(const unsigned char *s, int len)
|
|
1429
1635
|
}
|
1430
1636
|
|
1431
1637
|
static int
|
1432
|
-
|
1638
|
+
pg_gbk_verifystr(const unsigned char *s, int len)
|
1639
|
+
{
|
1640
|
+
const unsigned char *start = s;
|
1641
|
+
|
1642
|
+
while (len > 0)
|
1643
|
+
{
|
1644
|
+
int l;
|
1645
|
+
|
1646
|
+
/* fast path for ASCII-subset characters */
|
1647
|
+
if (!IS_HIGHBIT_SET(*s))
|
1648
|
+
{
|
1649
|
+
if (*s == '\0')
|
1650
|
+
break;
|
1651
|
+
l = 1;
|
1652
|
+
}
|
1653
|
+
else
|
1654
|
+
{
|
1655
|
+
l = pg_gbk_verifychar(s, len);
|
1656
|
+
if (l == -1)
|
1657
|
+
break;
|
1658
|
+
}
|
1659
|
+
s += l;
|
1660
|
+
len -= l;
|
1661
|
+
}
|
1662
|
+
|
1663
|
+
return s - start;
|
1664
|
+
}
|
1665
|
+
|
1666
|
+
static int
|
1667
|
+
pg_uhc_verifychar(const unsigned char *s, int len)
|
1433
1668
|
{
|
1434
1669
|
int l,
|
1435
1670
|
mbl;
|
@@ -1439,6 +1674,11 @@ pg_uhc_verifier(const unsigned char *s, int len)
|
|
1439
1674
|
if (len < l)
|
1440
1675
|
return -1;
|
1441
1676
|
|
1677
|
+
if (l == 2 &&
|
1678
|
+
s[0] == NONUTF8_INVALID_BYTE0 &&
|
1679
|
+
s[1] == NONUTF8_INVALID_BYTE1)
|
1680
|
+
return -1;
|
1681
|
+
|
1442
1682
|
while (--l > 0)
|
1443
1683
|
{
|
1444
1684
|
if (*++s == '\0')
|
@@ -1449,7 +1689,36 @@ pg_uhc_verifier(const unsigned char *s, int len)
|
|
1449
1689
|
}
|
1450
1690
|
|
1451
1691
|
static int
|
1452
|
-
|
1692
|
+
pg_uhc_verifystr(const unsigned char *s, int len)
|
1693
|
+
{
|
1694
|
+
const unsigned char *start = s;
|
1695
|
+
|
1696
|
+
while (len > 0)
|
1697
|
+
{
|
1698
|
+
int l;
|
1699
|
+
|
1700
|
+
/* fast path for ASCII-subset characters */
|
1701
|
+
if (!IS_HIGHBIT_SET(*s))
|
1702
|
+
{
|
1703
|
+
if (*s == '\0')
|
1704
|
+
break;
|
1705
|
+
l = 1;
|
1706
|
+
}
|
1707
|
+
else
|
1708
|
+
{
|
1709
|
+
l = pg_uhc_verifychar(s, len);
|
1710
|
+
if (l == -1)
|
1711
|
+
break;
|
1712
|
+
}
|
1713
|
+
s += l;
|
1714
|
+
len -= l;
|
1715
|
+
}
|
1716
|
+
|
1717
|
+
return s - start;
|
1718
|
+
}
|
1719
|
+
|
1720
|
+
static int
|
1721
|
+
pg_gb18030_verifychar(const unsigned char *s, int len)
|
1453
1722
|
{
|
1454
1723
|
int l;
|
1455
1724
|
|
@@ -1480,11 +1749,55 @@ pg_gb18030_verifier(const unsigned char *s, int len)
|
|
1480
1749
|
}
|
1481
1750
|
|
1482
1751
|
static int
|
1483
|
-
|
1752
|
+
pg_gb18030_verifystr(const unsigned char *s, int len)
|
1484
1753
|
{
|
1485
|
-
|
1754
|
+
const unsigned char *start = s;
|
1486
1755
|
|
1487
|
-
|
1756
|
+
while (len > 0)
|
1757
|
+
{
|
1758
|
+
int l;
|
1759
|
+
|
1760
|
+
/* fast path for ASCII-subset characters */
|
1761
|
+
if (!IS_HIGHBIT_SET(*s))
|
1762
|
+
{
|
1763
|
+
if (*s == '\0')
|
1764
|
+
break;
|
1765
|
+
l = 1;
|
1766
|
+
}
|
1767
|
+
else
|
1768
|
+
{
|
1769
|
+
l = pg_gb18030_verifychar(s, len);
|
1770
|
+
if (l == -1)
|
1771
|
+
break;
|
1772
|
+
}
|
1773
|
+
s += l;
|
1774
|
+
len -= l;
|
1775
|
+
}
|
1776
|
+
|
1777
|
+
return s - start;
|
1778
|
+
}
|
1779
|
+
|
1780
|
+
static int
|
1781
|
+
pg_utf8_verifychar(const unsigned char *s, int len)
|
1782
|
+
{
|
1783
|
+
int l;
|
1784
|
+
|
1785
|
+
if ((*s & 0x80) == 0)
|
1786
|
+
{
|
1787
|
+
if (*s == '\0')
|
1788
|
+
return -1;
|
1789
|
+
return 1;
|
1790
|
+
}
|
1791
|
+
else if ((*s & 0xe0) == 0xc0)
|
1792
|
+
l = 2;
|
1793
|
+
else if ((*s & 0xf0) == 0xe0)
|
1794
|
+
l = 3;
|
1795
|
+
else if ((*s & 0xf8) == 0xf0)
|
1796
|
+
l = 4;
|
1797
|
+
else
|
1798
|
+
l = 1;
|
1799
|
+
|
1800
|
+
if (l > len)
|
1488
1801
|
return -1;
|
1489
1802
|
|
1490
1803
|
if (!pg_utf8_islegal(s, l))
|
@@ -1493,6 +1806,251 @@ pg_utf8_verifier(const unsigned char *s, int len)
|
|
1493
1806
|
return l;
|
1494
1807
|
}
|
1495
1808
|
|
1809
|
+
/*
|
1810
|
+
* The fast path of the UTF-8 verifier uses a deterministic finite automaton
|
1811
|
+
* (DFA) for multibyte characters. In a traditional table-driven DFA, the
|
1812
|
+
* input byte and current state are used to compute an index into an array of
|
1813
|
+
* state transitions. Since the address of the next transition is dependent
|
1814
|
+
* on this computation, there is latency in executing the load instruction,
|
1815
|
+
* and the CPU is not kept busy.
|
1816
|
+
*
|
1817
|
+
* Instead, we use a "shift-based" DFA as described by Per Vognsen:
|
1818
|
+
*
|
1819
|
+
* https://gist.github.com/pervognsen/218ea17743e1442e59bb60d29b1aa725
|
1820
|
+
*
|
1821
|
+
* In a shift-based DFA, the input byte is an index into array of integers
|
1822
|
+
* whose bit pattern encodes the state transitions. To compute the next
|
1823
|
+
* state, we simply right-shift the integer by the current state and apply a
|
1824
|
+
* mask. In this scheme, the address of the transition only depends on the
|
1825
|
+
* input byte, so there is better pipelining.
|
1826
|
+
*
|
1827
|
+
* The naming convention for states and transitions was adopted from a UTF-8
|
1828
|
+
* to UTF-16/32 transcoder, whose table is reproduced below:
|
1829
|
+
*
|
1830
|
+
* https://github.com/BobSteagall/utf_utils/blob/6b7a465265de2f5fa6133d653df0c9bdd73bbcf8/src/utf_utils.cpp
|
1831
|
+
*
|
1832
|
+
* ILL ASC CR1 CR2 CR3 L2A L3A L3B L3C L4A L4B L4C CLASS / STATE
|
1833
|
+
* ==========================================================================
|
1834
|
+
* err, END, err, err, err, CS1, P3A, CS2, P3B, P4A, CS3, P4B, | BGN/END
|
1835
|
+
* err, err, err, err, err, err, err, err, err, err, err, err, | ERR
|
1836
|
+
* |
|
1837
|
+
* err, err, END, END, END, err, err, err, err, err, err, err, | CS1
|
1838
|
+
* err, err, CS1, CS1, CS1, err, err, err, err, err, err, err, | CS2
|
1839
|
+
* err, err, CS2, CS2, CS2, err, err, err, err, err, err, err, | CS3
|
1840
|
+
* |
|
1841
|
+
* err, err, err, err, CS1, err, err, err, err, err, err, err, | P3A
|
1842
|
+
* err, err, CS1, CS1, err, err, err, err, err, err, err, err, | P3B
|
1843
|
+
* |
|
1844
|
+
* err, err, err, CS2, CS2, err, err, err, err, err, err, err, | P4A
|
1845
|
+
* err, err, CS2, err, err, err, err, err, err, err, err, err, | P4B
|
1846
|
+
*
|
1847
|
+
* In the most straightforward implementation, a shift-based DFA for UTF-8
|
1848
|
+
* requires 64-bit integers to encode the transitions, but with an SMT solver
|
1849
|
+
* it's possible to find state numbers such that the transitions fit within
|
1850
|
+
* 32-bit integers, as Dougall Johnson demonstrated:
|
1851
|
+
*
|
1852
|
+
* https://gist.github.com/dougallj/166e326de6ad4cf2c94be97a204c025f
|
1853
|
+
*
|
1854
|
+
* This packed representation is the reason for the seemingly odd choice of
|
1855
|
+
* state values below.
|
1856
|
+
*/
|
1857
|
+
|
1858
|
+
/* Error */
|
1859
|
+
#define ERR 0
|
1860
|
+
/* Begin */
|
1861
|
+
#define BGN 11
|
1862
|
+
/* Continuation states, expect 1/2/3 continuation bytes */
|
1863
|
+
#define CS1 16
|
1864
|
+
#define CS2 1
|
1865
|
+
#define CS3 5
|
1866
|
+
/* Partial states, where the first continuation byte has a restricted range */
|
1867
|
+
#define P3A 6 /* Lead was E0, check for 3-byte overlong */
|
1868
|
+
#define P3B 20 /* Lead was ED, check for surrogate */
|
1869
|
+
#define P4A 25 /* Lead was F0, check for 4-byte overlong */
|
1870
|
+
#define P4B 30 /* Lead was F4, check for too-large */
|
1871
|
+
/* Begin and End are the same state */
|
1872
|
+
#define END BGN
|
1873
|
+
|
1874
|
+
/* the encoded state transitions for the lookup table */
|
1875
|
+
|
1876
|
+
/* ASCII */
|
1877
|
+
#define ASC (END << BGN)
|
1878
|
+
/* 2-byte lead */
|
1879
|
+
#define L2A (CS1 << BGN)
|
1880
|
+
/* 3-byte lead */
|
1881
|
+
#define L3A (P3A << BGN)
|
1882
|
+
#define L3B (CS2 << BGN)
|
1883
|
+
#define L3C (P3B << BGN)
|
1884
|
+
/* 4-byte lead */
|
1885
|
+
#define L4A (P4A << BGN)
|
1886
|
+
#define L4B (CS3 << BGN)
|
1887
|
+
#define L4C (P4B << BGN)
|
1888
|
+
/* continuation byte */
|
1889
|
+
#define CR1 (END << CS1) | (CS1 << CS2) | (CS2 << CS3) | (CS1 << P3B) | (CS2 << P4B)
|
1890
|
+
#define CR2 (END << CS1) | (CS1 << CS2) | (CS2 << CS3) | (CS1 << P3B) | (CS2 << P4A)
|
1891
|
+
#define CR3 (END << CS1) | (CS1 << CS2) | (CS2 << CS3) | (CS1 << P3A) | (CS2 << P4A)
|
1892
|
+
/* invalid byte */
|
1893
|
+
#define ILL ERR
|
1894
|
+
|
1895
|
+
static const uint32 Utf8Transition[256] =
|
1896
|
+
{
|
1897
|
+
/* ASCII */
|
1898
|
+
|
1899
|
+
ILL, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1900
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1901
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1902
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1903
|
+
|
1904
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1905
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1906
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1907
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1908
|
+
|
1909
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1910
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1911
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1912
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1913
|
+
|
1914
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1915
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1916
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1917
|
+
ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
|
1918
|
+
|
1919
|
+
/* continuation bytes */
|
1920
|
+
|
1921
|
+
/* 80..8F */
|
1922
|
+
CR1, CR1, CR1, CR1, CR1, CR1, CR1, CR1,
|
1923
|
+
CR1, CR1, CR1, CR1, CR1, CR1, CR1, CR1,
|
1924
|
+
|
1925
|
+
/* 90..9F */
|
1926
|
+
CR2, CR2, CR2, CR2, CR2, CR2, CR2, CR2,
|
1927
|
+
CR2, CR2, CR2, CR2, CR2, CR2, CR2, CR2,
|
1928
|
+
|
1929
|
+
/* A0..BF */
|
1930
|
+
CR3, CR3, CR3, CR3, CR3, CR3, CR3, CR3,
|
1931
|
+
CR3, CR3, CR3, CR3, CR3, CR3, CR3, CR3,
|
1932
|
+
CR3, CR3, CR3, CR3, CR3, CR3, CR3, CR3,
|
1933
|
+
CR3, CR3, CR3, CR3, CR3, CR3, CR3, CR3,
|
1934
|
+
|
1935
|
+
/* leading bytes */
|
1936
|
+
|
1937
|
+
/* C0..DF */
|
1938
|
+
ILL, ILL, L2A, L2A, L2A, L2A, L2A, L2A,
|
1939
|
+
L2A, L2A, L2A, L2A, L2A, L2A, L2A, L2A,
|
1940
|
+
L2A, L2A, L2A, L2A, L2A, L2A, L2A, L2A,
|
1941
|
+
L2A, L2A, L2A, L2A, L2A, L2A, L2A, L2A,
|
1942
|
+
|
1943
|
+
/* E0..EF */
|
1944
|
+
L3A, L3B, L3B, L3B, L3B, L3B, L3B, L3B,
|
1945
|
+
L3B, L3B, L3B, L3B, L3B, L3C, L3B, L3B,
|
1946
|
+
|
1947
|
+
/* F0..FF */
|
1948
|
+
L4A, L4B, L4B, L4B, L4C, ILL, ILL, ILL,
|
1949
|
+
ILL, ILL, ILL, ILL, ILL, ILL, ILL, ILL
|
1950
|
+
};
|
1951
|
+
|
1952
|
+
static void
|
1953
|
+
utf8_advance(const unsigned char *s, uint32 *state, int len)
|
1954
|
+
{
|
1955
|
+
/* Note: We deliberately don't check the state's value here. */
|
1956
|
+
while (len > 0)
|
1957
|
+
{
|
1958
|
+
/*
|
1959
|
+
* It's important that the mask value is 31: In most instruction sets,
|
1960
|
+
* a shift by a 32-bit operand is understood to be a shift by its mod
|
1961
|
+
* 32, so the compiler should elide the mask operation.
|
1962
|
+
*/
|
1963
|
+
*state = Utf8Transition[*s++] >> (*state & 31);
|
1964
|
+
len--;
|
1965
|
+
}
|
1966
|
+
|
1967
|
+
*state &= 31;
|
1968
|
+
}
|
1969
|
+
|
1970
|
+
static int
|
1971
|
+
pg_utf8_verifystr(const unsigned char *s, int len)
|
1972
|
+
{
|
1973
|
+
const unsigned char *start = s;
|
1974
|
+
const int orig_len = len;
|
1975
|
+
uint32 state = BGN;
|
1976
|
+
|
1977
|
+
/*
|
1978
|
+
* With a stride of two vector widths, gcc will unroll the loop. Even if
|
1979
|
+
* the compiler can unroll a longer loop, it's not worth it because we
|
1980
|
+
* must fall back to the byte-wise algorithm if we find any non-ASCII.
|
1981
|
+
*/
|
1982
|
+
#define STRIDE_LENGTH (2 * sizeof(Vector8))
|
1983
|
+
|
1984
|
+
if (len >= STRIDE_LENGTH)
|
1985
|
+
{
|
1986
|
+
while (len >= STRIDE_LENGTH)
|
1987
|
+
{
|
1988
|
+
/*
|
1989
|
+
* If the chunk is all ASCII, we can skip the full UTF-8 check,
|
1990
|
+
* but we must first check for a non-END state, which means the
|
1991
|
+
* previous chunk ended in the middle of a multibyte sequence.
|
1992
|
+
*/
|
1993
|
+
if (state != END || !is_valid_ascii(s, STRIDE_LENGTH))
|
1994
|
+
utf8_advance(s, &state, STRIDE_LENGTH);
|
1995
|
+
|
1996
|
+
s += STRIDE_LENGTH;
|
1997
|
+
len -= STRIDE_LENGTH;
|
1998
|
+
}
|
1999
|
+
|
2000
|
+
/* The error state persists, so we only need to check for it here. */
|
2001
|
+
if (state == ERR)
|
2002
|
+
{
|
2003
|
+
/*
|
2004
|
+
* Start over from the beginning with the slow path so we can
|
2005
|
+
* count the valid bytes.
|
2006
|
+
*/
|
2007
|
+
len = orig_len;
|
2008
|
+
s = start;
|
2009
|
+
}
|
2010
|
+
else if (state != END)
|
2011
|
+
{
|
2012
|
+
/*
|
2013
|
+
* The fast path exited in the middle of a multibyte sequence.
|
2014
|
+
* Walk backwards to find the leading byte so that the slow path
|
2015
|
+
* can resume checking from there. We must always backtrack at
|
2016
|
+
* least one byte, since the current byte could be e.g. an ASCII
|
2017
|
+
* byte after a 2-byte lead, which is invalid.
|
2018
|
+
*/
|
2019
|
+
do
|
2020
|
+
{
|
2021
|
+
Assert(s > start);
|
2022
|
+
s--;
|
2023
|
+
len++;
|
2024
|
+
Assert(IS_HIGHBIT_SET(*s));
|
2025
|
+
} while (pg_utf_mblen(s) <= 1);
|
2026
|
+
}
|
2027
|
+
}
|
2028
|
+
|
2029
|
+
/* check remaining bytes */
|
2030
|
+
while (len > 0)
|
2031
|
+
{
|
2032
|
+
int l;
|
2033
|
+
|
2034
|
+
/* fast path for ASCII-subset characters */
|
2035
|
+
if (!IS_HIGHBIT_SET(*s))
|
2036
|
+
{
|
2037
|
+
if (*s == '\0')
|
2038
|
+
break;
|
2039
|
+
l = 1;
|
2040
|
+
}
|
2041
|
+
else
|
2042
|
+
{
|
2043
|
+
l = pg_utf8_verifychar(s, len);
|
2044
|
+
if (l == -1)
|
2045
|
+
break;
|
2046
|
+
}
|
2047
|
+
s += l;
|
2048
|
+
len -= l;
|
2049
|
+
}
|
2050
|
+
|
2051
|
+
return s - start;
|
2052
|
+
}
|
2053
|
+
|
1496
2054
|
/*
|
1497
2055
|
* Check for validity of a single UTF-8 encoded character
|
1498
2056
|
*
|
@@ -1565,55 +2123,60 @@ pg_utf8_islegal(const unsigned char *source, int length)
|
|
1565
2123
|
}
|
1566
2124
|
|
1567
2125
|
|
2126
|
+
/*
|
2127
|
+
* Fills the provided buffer with two bytes such that:
|
2128
|
+
* pg_encoding_mblen(dst) == 2 && pg_encoding_verifymbstr(dst) == 0
|
2129
|
+
*/
|
2130
|
+
|
2131
|
+
|
1568
2132
|
/*
|
1569
2133
|
*-------------------------------------------------------------------
|
1570
2134
|
* encoding info table
|
1571
|
-
* XXX must be sorted by the same order as enum pg_enc (in mb/pg_wchar.h)
|
1572
2135
|
*-------------------------------------------------------------------
|
1573
2136
|
*/
|
1574
2137
|
const pg_wchar_tbl pg_wchar_table[] = {
|
1575
|
-
{pg_ascii2wchar_with_len, pg_wchar2single_with_len, pg_ascii_mblen, pg_ascii_dsplen,
|
1576
|
-
{pg_eucjp2wchar_with_len, pg_wchar2euc_with_len, pg_eucjp_mblen, pg_eucjp_dsplen,
|
1577
|
-
{pg_euccn2wchar_with_len, pg_wchar2euc_with_len, pg_euccn_mblen, pg_euccn_dsplen,
|
1578
|
-
{pg_euckr2wchar_with_len, pg_wchar2euc_with_len, pg_euckr_mblen, pg_euckr_dsplen,
|
1579
|
-
{pg_euctw2wchar_with_len, pg_wchar2euc_with_len, pg_euctw_mblen, pg_euctw_dsplen,
|
1580
|
-
{pg_eucjp2wchar_with_len, pg_wchar2euc_with_len, pg_eucjp_mblen, pg_eucjp_dsplen,
|
1581
|
-
{pg_utf2wchar_with_len, pg_wchar2utf_with_len, pg_utf_mblen, pg_utf_dsplen,
|
1582
|
-
{pg_mule2wchar_with_len, pg_wchar2mule_with_len, pg_mule_mblen, pg_mule_dsplen,
|
1583
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1584
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1585
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1586
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1587
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1588
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1589
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1590
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1591
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1592
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1593
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1594
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1595
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1596
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1597
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1598
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1599
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1600
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1601
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1602
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1603
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1604
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1605
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1606
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1607
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1608
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1609
|
-
{pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen,
|
1610
|
-
{0, 0, pg_sjis_mblen, pg_sjis_dsplen,
|
1611
|
-
{0, 0, pg_big5_mblen, pg_big5_dsplen,
|
1612
|
-
{0, 0, pg_gbk_mblen, pg_gbk_dsplen,
|
1613
|
-
{0, 0, pg_uhc_mblen, pg_uhc_dsplen,
|
1614
|
-
{0, 0, pg_gb18030_mblen, pg_gb18030_dsplen,
|
1615
|
-
{0, 0, pg_johab_mblen, pg_johab_dsplen,
|
1616
|
-
{0, 0, pg_sjis_mblen, pg_sjis_dsplen,
|
2138
|
+
[PG_SQL_ASCII] = {pg_ascii2wchar_with_len, pg_wchar2single_with_len, pg_ascii_mblen, pg_ascii_dsplen, pg_ascii_verifychar, pg_ascii_verifystr, 1},
|
2139
|
+
[PG_EUC_JP] = {pg_eucjp2wchar_with_len, pg_wchar2euc_with_len, pg_eucjp_mblen, pg_eucjp_dsplen, pg_eucjp_verifychar, pg_eucjp_verifystr, 3},
|
2140
|
+
[PG_EUC_CN] = {pg_euccn2wchar_with_len, pg_wchar2euc_with_len, pg_euccn_mblen, pg_euccn_dsplen, pg_euccn_verifychar, pg_euccn_verifystr, 2},
|
2141
|
+
[PG_EUC_KR] = {pg_euckr2wchar_with_len, pg_wchar2euc_with_len, pg_euckr_mblen, pg_euckr_dsplen, pg_euckr_verifychar, pg_euckr_verifystr, 3},
|
2142
|
+
[PG_EUC_TW] = {pg_euctw2wchar_with_len, pg_wchar2euc_with_len, pg_euctw_mblen, pg_euctw_dsplen, pg_euctw_verifychar, pg_euctw_verifystr, 4},
|
2143
|
+
[PG_EUC_JIS_2004] = {pg_eucjp2wchar_with_len, pg_wchar2euc_with_len, pg_eucjp_mblen, pg_eucjp_dsplen, pg_eucjp_verifychar, pg_eucjp_verifystr, 3},
|
2144
|
+
[PG_UTF8] = {pg_utf2wchar_with_len, pg_wchar2utf_with_len, pg_utf_mblen, pg_utf_dsplen, pg_utf8_verifychar, pg_utf8_verifystr, 4},
|
2145
|
+
[PG_MULE_INTERNAL] = {pg_mule2wchar_with_len, pg_wchar2mule_with_len, pg_mule_mblen, pg_mule_dsplen, pg_mule_verifychar, pg_mule_verifystr, 4},
|
2146
|
+
[PG_LATIN1] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2147
|
+
[PG_LATIN2] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2148
|
+
[PG_LATIN3] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2149
|
+
[PG_LATIN4] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2150
|
+
[PG_LATIN5] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2151
|
+
[PG_LATIN6] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2152
|
+
[PG_LATIN7] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2153
|
+
[PG_LATIN8] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2154
|
+
[PG_LATIN9] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2155
|
+
[PG_LATIN10] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2156
|
+
[PG_WIN1256] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2157
|
+
[PG_WIN1258] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2158
|
+
[PG_WIN866] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2159
|
+
[PG_WIN874] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2160
|
+
[PG_KOI8R] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2161
|
+
[PG_WIN1251] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2162
|
+
[PG_WIN1252] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2163
|
+
[PG_ISO_8859_5] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2164
|
+
[PG_ISO_8859_6] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2165
|
+
[PG_ISO_8859_7] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2166
|
+
[PG_ISO_8859_8] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2167
|
+
[PG_WIN1250] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2168
|
+
[PG_WIN1253] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2169
|
+
[PG_WIN1254] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2170
|
+
[PG_WIN1255] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2171
|
+
[PG_WIN1257] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2172
|
+
[PG_KOI8U] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
|
2173
|
+
[PG_SJIS] = {0, 0, pg_sjis_mblen, pg_sjis_dsplen, pg_sjis_verifychar, pg_sjis_verifystr, 2},
|
2174
|
+
[PG_BIG5] = {0, 0, pg_big5_mblen, pg_big5_dsplen, pg_big5_verifychar, pg_big5_verifystr, 2},
|
2175
|
+
[PG_GBK] = {0, 0, pg_gbk_mblen, pg_gbk_dsplen, pg_gbk_verifychar, pg_gbk_verifystr, 2},
|
2176
|
+
[PG_UHC] = {0, 0, pg_uhc_mblen, pg_uhc_dsplen, pg_uhc_verifychar, pg_uhc_verifystr, 2},
|
2177
|
+
[PG_GB18030] = {0, 0, pg_gb18030_mblen, pg_gb18030_dsplen, pg_gb18030_verifychar, pg_gb18030_verifystr, 4},
|
2178
|
+
[PG_JOHAB] = {0, 0, pg_johab_mblen, pg_johab_dsplen, pg_johab_verifychar, pg_johab_verifystr, 3},
|
2179
|
+
[PG_SHIFT_JIS_2004] = {0, 0, pg_sjis_mblen, pg_sjis_dsplen, pg_sjis_verifychar, pg_sjis_verifystr, 2},
|
1617
2180
|
};
|
1618
2181
|
|
1619
2182
|
/*
|
@@ -1646,7 +2209,14 @@ pg_encoding_mblen(int encoding, const char *mbstr)
|
|
1646
2209
|
/*
|
1647
2210
|
* Verify the first multibyte character of the given string.
|
1648
2211
|
* Return its byte length if good, -1 if bad. (See comments above for
|
1649
|
-
* full details of the
|
2212
|
+
* full details of the mbverifychar API.)
|
2213
|
+
*/
|
2214
|
+
|
2215
|
+
|
2216
|
+
/*
|
2217
|
+
* Verify that a string is valid for the given encoding.
|
2218
|
+
* Returns the number of input bytes (<= len) that form a valid string.
|
2219
|
+
* (See comments above for full details of the mbverifystr API.)
|
1650
2220
|
*/
|
1651
2221
|
|
1652
2222
|
|
@@ -1658,5 +2228,11 @@ pg_encoding_max_length(int encoding)
|
|
1658
2228
|
{
|
1659
2229
|
Assert(PG_VALID_ENCODING(encoding));
|
1660
2230
|
|
1661
|
-
|
2231
|
+
/*
|
2232
|
+
* Check for the encoding despite the assert, due to some mingw versions
|
2233
|
+
* otherwise issuing bogus warnings.
|
2234
|
+
*/
|
2235
|
+
return PG_VALID_ENCODING(encoding) ?
|
2236
|
+
pg_wchar_table[encoding].maxmblen :
|
2237
|
+
pg_wchar_table[PG_SQL_ASCII].maxmblen;
|
1662
2238
|
}
|