summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt
AgeCommit message (Collapse)Author
2007-04-06Make 'col IS NULL' clauses be indexable conditions.Tom Lane
Teodor Sigaev, with some kibitzing from Tom Lane.
2007-04-06Support varlena fields with single-byte headers and unaligned storage.Tom Lane
This commit breaks any code that assumes that the mere act of forming a tuple (without writing it to disk) does not "toast" any fields. While all available regression tests pass, I'm not totally sure that we've fixed every nook and cranny, especially in contrib. Greg Stark with some help from Tom Lane
2007-04-05Update XML error message text for missing libxml; update regressionBruce Momjian
output to match.
2007-04-05Improve documentation/warning when --with-libxml is not used in theBruce Momjian
installation.
2007-04-02Check length of enum literals on definition and input to make sure they will ↵Andrew Dunstan
fit in a name field and not cause syscache errors.
2007-04-02Support enum data types. Along the way, use macros for the values ofTom Lane
pg_type.typtype whereever practical. Tom Dunstan, with some kibitzing from Tom Lane.
2007-04-01Mapping schemas and databases to XML and XML Schema.Peter Eisentraut
Refactor and document the remaining mapping code.
2007-03-30Add some instrumentation to the bgwriter, through the stats collector.Magnus Hagander
New view pg_stat_bgwriter, and the functions required to build it.
2007-03-28Code cleanup for the new regexp UDFs: we can hardcode the OID and someNeil Conway
properties of the "text" type, and then simplify the code accordingly. Patch from Jeremy Drake.
2007-03-27Fix array coercion expressions to ensure that the correct volatility isTom Lane
seen by code inspecting the expression. The best way to do this seems to be to drop the original representation as a function invocation, and instead make a special expression node type that represents applying the element-type coercion function to each array element. In this way the element function is exposed and will be checked for volatility. Per report from Guillaume Smet.
2007-03-25Clean up the representation of special snapshots by including a "methodTom Lane
pointer" in every Snapshot struct. This allows removal of the case-by-case tests in HeapTupleSatisfiesVisibility, which should make it a bit faster (I didn't try any performance tests though). More importantly, we are no longer violating portable C practices by assuming that small integers are distinct from all pointer values, and HeapTupleSatisfiesDirty no longer has a non-reentrant API involving side-effects on a global variable. There were a couple of places calling HeapTupleSatisfiesXXX routines directly rather than through the HeapTupleSatisfiesVisibility macro. Since these places had to be changed anyway, I chose to make them go through the macro for uniformity. Along the way I renamed HeapTupleSatisfiesSnapshot to HeapTupleSatisfiesMVCC to emphasize that it's only used with MVCC-type snapshots. I was sorely tempted to rename HeapTupleSatisfiesVisibility to HeapTupleSatisfiesSnapshot, but forebore for the moment to avoid confusion and reduce the likelihood that this patch breaks some of the pending patches. Might want to reconsider doing that later.
2007-03-22Commit newest version of xmlpath().Bruce Momjian
Nikolay Samokhvalov
2007-03-22Add xmlpath() to evaluate XPath expressions, with namespaces support.Bruce Momjian
Nikolay Samokhvalov
2007-03-21Fix some problems with selectivity estimation for partial indexes.Tom Lane
First, genericcostestimate() was being way too liberal about including partial-index conditions in its selectivity estimate, resulting in substantial underestimates for situations such as an indexqual "x = 42" used with an index on x "WHERE x >= 40 AND x < 50". While the code is intentionally set up to favor selecting partial indexes when available, this was too much... Second, choose_bitmap_and() was likewise easily fooled by cases of this type, since it would similarly think that the partial index had selectivity independent of the indexqual. Fixed by using predicate_implied_by() rather than simple equality checks to determine redundancy. This is a good deal more expensive but I don't see much alternative. At least the extra cost is only paid when there's actually a partial index under consideration. Per report from Jeff Davis. I'm not going to risk back-patching this, though.
2007-03-20Add three new regexp functions: regexp_matches, regexp_split_to_array,Neil Conway
and regexp_split_to_table. These functions provide access to the capture groups resulting from a POSIX regular expression match, and provide the ability to split a string on a POSIX regular expression, respectively. Patch from Jeremy Drake; code review by Neil Conway, additional comments and suggestions from Tom and Peter E. This patch bumps the catversion, adds some regression tests, and updates the docs.
2007-03-18Code cleanup: mark some variables with the "const" modifier, when theyNeil Conway
are initialized with a string literal. Patch from Stefan Huehner.
2007-03-17Ooops, got only one of the two ArrayExpr variants correct in firstTom Lane
cut at exprTypmod support. Also, experimentation shows that we need to label the type of Const nodes that are numeric with a specific typmod.
2007-03-17Fix up the remaining places where the expression node structure would loseTom Lane
available information about the typmod of an expression; namely, Const, ArrayRef, ArrayExpr, and EXPR and ARRAY SubLinks. In the ArrayExpr and SubLink cases it wasn't really the data structure's fault, but exprTypmod() being lazy. This seems like a good idea in view of the expected increase in typmod usage from Teodor's work to allow user-defined types to have typmods. In particular this responds to the concerns we had about eliminating the special-purpose hack that exprTypmod() used to have for BPCHAR Consts. We can now tell whether or not such a Const has been cast to a specific length, and report or display properly if so. initdb forced due to changes in stored rules.
2007-03-16Add new columns for tuple statistics on a database level toMagnus Hagander
pg_stat_database.
2007-03-15Make use of plancache module for SPI plans. In particular, since plpgsqlTom Lane
uses SPI plans, this finally fixes the ancient gotcha that you can't drop and recreate a temp table used by a plpgsql function. Along the way, clean up SPI's API a little bit by declaring SPI plan pointers as "SPIPlanPtr" instead of "void *". This is cosmetic but helps to forestall simple programming mistakes. (I have changed some but not all of the callers to match; there are still some "void *"'s in contrib and the PL's. This is intentional so that we can see if anyone's compiler complains about it.)
2007-03-11Fix a race condition that caused pg_database_size() and pg_tablespace_size()Alvaro Herrera
to fail if an object was removed between calls to ReadDir() and stat(). Per discussion in pgsql-hackers. http://archives.postgresql.org/pgsql-hackers/2007-03/msg00671.php Bug report and patch by Michael Fuhr.
2007-03-05Remove copied comments from geo_ops.c source file and replace with newBruce Momjian
comments, and cleanup functions. Remove copyright that is no longer relevant.
2007-03-03Add resetStringInfo(), which clears the content of a StringInfo, andNeil Conway
fixup various places in the tree that were clearing a StringInfo by hand. Making this function a part of the API simplifies client code slightly, and avoids needlessly peeking inside the StringInfo interface.
2007-03-01Fix date/time formats for XML Schema output.Peter Eisentraut
Pavel Stehule
2007-02-27Replace direct assignments to VARATT_SIZEP(x) with SET_VARSIZE(x, len).Tom Lane
Get rid of VARATT_SIZE and VARATT_DATA, which were simply redundant with VARSIZE and VARDATA, and as a consequence almost no code was using the longer names. Rename the length fields of struct varlena and various derived structures to catch anyplace that was accessing them directly; and clean up various places so caught. In itself this patch doesn't change any behavior at all, but it is necessary infrastructure if we hope to play any games with the representation of varlena headers. Greg Stark and Tom Lane
2007-02-23Now that plans have flat rangetable lists, it's a lot easier to get EXPLAIN toTom Lane
drill down into subplan targetlists to print the referent expression for an OUTER or INNER var in an upper plan node. Hence, make it do that always, and banish the old hack of showing "?columnN?" when things got too complicated. Along the way, fix an EXPLAIN bug I introduced by suppressing subqueries from execution-time range tables: get_name_for_var_field() assumed it could look at rte->subquery to find out the real type of a RECORD var. That doesn't work anymore, but instead we can look at the input plan of the SubqueryScan plan node.
2007-02-22Change Agg and Group nodes so that Vars contained in their targetlistsTom Lane
and quals have varno OUTER, rather than zero, to indicate a reference to an output of their lefttree subplan. This is consistent with the way that every other upper-level node type does it, and allows some simplifications in setrefs.c and EXPLAIN.
2007-02-22Turn the rangetable used by the executor into a flat list, and avoid storingTom Lane
useless substructure for its RangeTblEntry nodes. (I chose to keep using the same struct node type and just zero out the link fields for unneeded info, rather than making a separate ExecRangeTblEntry type --- it seemed too fragile to have two different rangetable representations.) Along the way, put subplans into a list in the toplevel PlannedStmt node, and have SubPlan nodes refer to them by list index instead of direct pointers. Vadim wanted to do that years ago, but I never understood what he was on about until now. It makes things a *whole* lot more robust, because we can stop worrying about duplicate processing of subplans during expression tree traversals. That's been a constant source of bugs, and it's finally gone. There are some consequent simplifications yet to be made, like not using a separate EState for subplans in the executor, but I'll tackle that later.
2007-02-19Add "isodow" option to EXTRACT() and date_part() where Sunday = 7.Bruce Momjian
2007-02-19Get rid of some old and crufty global variables in the planner. WhenTom Lane
this code was last gone over, there wasn't really any alternative to globals because we didn't have the PlannerInfo struct being passed all through the planner code. Now that we do, we can restructure things to avoid non-reentrancy. I'm fooling with this because otherwise I'd have had to add another global variable for the planned compact range table list.
2007-02-17Remove rint() for to_char MS and US output. We can't us rint() becauseBruce Momjian
we can't overflow to the next higher units, and we might print the lower units for MS.
2007-02-17Cleanup of to_char() patch.Bruce Momjian
Brendan Jurd
2007-02-17Create AVG() aggregates for int8 and NUMERIC which do not compute X^2,Bruce Momjian
as a performance enhancement. Mark Kirkwood
2007-02-16Better fix for determining minimum and maximum int64 values that doesn'tPeter Eisentraut
require stdint.h and works for "busted" int64.
2007-02-16Fix // commentPeter Eisentraut
2007-02-16Add stdint.h includePeter Eisentraut
2007-02-16Functions for mapping table data and table schemas to XML (a.k.a. XML export)Peter Eisentraut
2007-02-16Add two new format fields for use with to_char(), to_date() andBruce Momjian
to_timestamp(): - ID for day-of-week - IDDD for day-of-year This makes it possible to convert ISO week dates to and from text fully represented in either week ('IYYY-IW-ID') or day-of-year ('IYYY-IDDD') format. I have also added an 'isoyear' field for use with extract / date_part. Brendan Jurd
2007-02-14Fix to_date()/to_timestamp() 'D' field for day of week, was off by one.Bruce Momjian
Converting from char using 'D' doesn't make lots of sense, of course. Report from Brendan Jurd.
2007-02-14Fix up foreign-key mechanism so that there is a sound semantic basis for theTom Lane
equality checks it applies, instead of a random dependence on whatever operators might be named "=". The equality operators will now be selected from the opfamily of the unique index that the FK constraint depends on to enforce uniqueness of the referenced columns; therefore they are certain to be consistent with that index's notion of equality. Among other things this should fix the problem noted awhile back that pg_dump may fail for foreign-key constraints on user-defined types when the required operators aren't in the search path. This also means that the former warning condition about "foreign key constraint will require costly sequential scans" is gone: if the comparison condition isn't indexable then we'll reject the constraint entirely. All per past discussions. Along the way, make the RI triggers look into pg_constraint for their information, instead of using pg_trigger.tgargs; and get rid of the always error-prone fixed-size string buffers in ri_triggers.c in favor of building up the RI queries in StringInfo buffers. initdb forced due to columns added to pg_constraint and pg_trigger.
2007-02-13Un-break build on ANSI compilers (like msvc) by moving Assert to positionMagnus Hagander
after variable declarations.
2007-02-13Add comment that to_char() for broken glibc pt_BR might cause a problem.Bruce Momjian
2007-02-11Add support for optionally escaping periods when converting SQL identifiersPeter Eisentraut
to XML names, which will be required for supporting XML export.
2007-02-10Add proper mapping of boolean type data to XML Schema.Peter Eisentraut
2007-02-09Remove blank lines in code.Bruce Momjian
2007-02-09Remove blank line from C code.Bruce Momjian
2007-02-08Fix bug when localized to_char() day or month names were incorectlyBruce Momjian
trnasformed to lower or upper string. Pavel Stehule
2007-02-08Fix bug in our code when using to_timestamp() or to_date() without "TM".Bruce Momjian
Assume "TM" when input fields are variable-length, like month or day names. This matches Oracle behavior.
2007-02-07Add a function pg_stat_clear_snapshot() that discards any statistics snapshotTom Lane
already collected in the current transaction; this allows plpgsql functions to watch for stats updates even though they are confined to a single transaction. Use this instead of the previous kluge involving pg_stat_file() to wait for the stats collector to update in the stats regression test. Internally, decouple storage of stats snapshots from transaction boundaries; they'll now stick around until someone calls pgstat_clear_snapshot --- which xact.c still does at transaction end, to maintain the previous behavior. This makes the logic a lot cleaner, at the price of a couple dozen cycles per transaction exit.
2007-02-03Implement XMLSERIALIZE for real. Analogously, make the xml to text castPeter Eisentraut
observe the xmloption. Reorganize the representation of the XML option in the parse tree and the API to make it easier to manage and understand. Add regression tests for parsing back XML expressions.