summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt
AgeCommit message (Collapse)Author
2008-02-07Avoid misbehavior in foreign key checks when casting to a datatype for whichTom Lane
the parser supplies a default typmod that can result in data loss (ie, truncation). Currently that appears to be only CHARACTER and BIT. We can avoid the problem by specifying the type's internal name instead of using SQL-spec syntax. Since the queries generated here are only used internally, there's no need to worry about portability. This problem is new in 8.3; before we just let the parser do whatever it wanted to resolve the operator, but 8.3 is trying to be sure that the semantics of FK checks are consistent. Per report from Harald Fuchs.
2008-01-25Release any detoasted copies of arrays that are made temporarily inTom Lane
ri_FetchConstraintInfo, to avoid a query-duration memory leak when that routine is called by RI_FKey_keyequal_upd_fk (which isn't executed in a short-lived context). This problem was latent when the routine was added in February, but it didn't become serious until the varvarlena patch made it quite likely that the fields being examined would be "toasted" (ie, have short headers). Per report from Stephen Denne.
2008-01-15Revise memory management for libxml calls. Instead of keeping libxml's dataTom Lane
in whichever context happens to be current during a call of an xml.c function, use a dedicated context that will not go away until we explicitly delete it (which we do at transaction end or subtransaction abort). This makes recovery after an error much simpler --- we don't have to individually delete the data structures created by libxml. Also, we need to initialize and cleanup libxml only once per transaction (if there's no error) instead of once per function call, so it should be a bit faster. We'll need to keep an eye out for intra-transaction memory leaks, though. Alvaro and Tom.
2008-01-12It turns out the LIBXML_TEST_VERSION macro calls xmlInitParser().Tom Lane
Therefore we must xmlCleanupParser(), or we risk leaving behind dangling pointers to whatever memory context is current when xml_init() is called. This seems to fix bug #3860, though we might still want the more invasive solution being worked on by Alvaro.
2008-01-12Fix two places in xml.c that neglected to check the return values ofNeil Conway
SPI_prepare() and SPI_cursor_open(), to silence a Coverity warning.
2008-01-12Minor perf tweak for _SPI_strdup(): if we're going to call strlen()Neil Conway
anyway, it is faster to memcpy() than to strcpy().
2008-01-08lmgr.c:DescribeLockTag was never taught about virtual xids, per Greg Stark.Tom Lane
Also a couple of minor tweaks to try to future-proof the code a bit better against future locktag additions.
2008-01-08Remove unnecessary comma in enum definition ... some C compilers don'tTom Lane
like that. Per report from J6M.
2008-01-06A long time ago, Peter pointed out that ruleutils.c didn't dump simpleTom Lane
constant ORDER/GROUP BY entries properly: http://archives.postgresql.org/pgsql-hackers/2001-04/msg00457.php The original solution to that was in fact no good, as demonstrated by today's report from Martin Pitt: http://archives.postgresql.org/pgsql-bugs/2008-01/msg00027.php We can't use the column-number-reference format for a constant that is a resjunk targetlist entry, a case that was unfortunately not thought of in the original discussion. What we can do instead (which did not work at the time, but does work in 7.3 and up) is to emit the constant with explicit ::typename decoration, even if it otherwise wouldn't need it. This is sufficient to keep the parser from thinking it's a column number reference, and indeed is probably what the user must have done to get such a thing into the querytree in the first place.
2008-01-03Make standard maintenance operations (including VACUUM, ANALYZE, REINDEX,Tom Lane
and CLUSTER) execute as the table owner rather than the calling user, using the same privilege-switching mechanism already used for SECURITY DEFINER functions. The purpose of this change is to ensure that user-defined functions used in index definitions cannot acquire the privileges of a superuser account that is performing routine maintenance. While a function used in an index is supposed to be IMMUTABLE and thus not able to do anything very interesting, there are several easy ways around that restriction; and even if we could plug them all, there would remain a risk of reading sensitive information and broadcasting it through a covert channel such as CPU usage. To prevent bypassing this security measure, execution of SET SESSION AUTHORIZATION and SET ROLE is now forbidden within a SECURITY DEFINER context. Thanks to Itagaki Takahiro for reporting this vulnerability. Security: CVE-2007-6600
2008-01-01Fix some missed copyright updates.Tom Lane
2008-01-01Update copyrights in source tree to 2008.Bruce Momjian
2007-12-27Wording improvementsPeter Eisentraut
2007-12-20When given a nonzero column number, pg_get_indexdef() is only supposed toTom Lane
print the index key variable or expression for that column. It was mistakenly printing ASC/DESC/NULLS FIRST/NULLS LAST decoration too --- and not only for the target column, but all columns. Someday we should have an option to extract that info (and the opclass decoration as well) for a single index column ... but today is not that day. Per bug #3829 and subsequent discussion.
2007-12-18Fix thinko in encoding check for chr()Andrew Dunstan
2007-12-18Make path_recv() and poly_recv() reject paths/polygons containing no points.Tom Lane
The zero-point case is sensible so far as the data structure is concerned, so maybe we ought to allow it sometime; but right now the textual input routines for these types don't allow it, and it seems that not all the functions for the types are prepared to cope. Report and patch by Merlin Moncure.
2007-12-08Fix mergejoin cost estimation so that we consider the statistical ranges ofTom Lane
the two join variables at both ends: not only trailing rows that need not be scanned because there cannot be a match on the other side, but initial rows that will be scanned without possibly having a match. This allows a more realistic estimate of startup cost to be made, per recent pgsql-performance discussion. In passing, fix a couple of bugs that had crept into mergejoinscansel: it was not quite up to speed for the task of estimating descending-order scans, which is a new requirement in 8.3.
2007-12-01Code review for LIKE ... INCLUDING INDEXES patch. Fix failure to propagateTom Lane
constraint status of copied indexes (bug #3774), as well as various other small bugs such as failure to pstrdup when needed. Allow INCLUDING INDEXES indexes to be merged with identical declared indexes (perhaps not real useful, but the code is there and having it not apply to LIKE indexes seems pretty unorthogonal). Avoid useless work in generateClonedIndexStmt(). Undo some poorly chosen API changes, and put a couple of routines in modules that seem to be better places for them.
2007-11-28Make a cleanup pass over error reports in tsearch code. Use ereportTom Lane
for user-facing errors, fix some poor choices of errcode, adhere to message style guide.
2007-11-28Adjust the names of a couple of tsearch index support functions that hadTom Lane
inappropriately generic-sounding names. This is more or less free since we already forced initdb for the next beta, and it may prevent confusion or name conflicts (particularly at the C-global-symbol level) down the road. Per my proposal yesterday.
2007-11-28Fix XML Schema structure for char types without length (bug #3782)Peter Eisentraut
2007-11-27Suppress compiler warning.Tom Lane
2007-11-27Make casts from xml to text independent of the XML option setting, thusPeter Eisentraut
immutable and indexable. Also fix the volatility settings of some other XML-related functions.
2007-11-25Use double quotes for quoting xml attributes.Peter Eisentraut
2007-11-24Slightly more paranoia and slightly better comments for use ofTom Lane
Windows-specific MultiByteToWideChar/WideCharToMultiByte calls.
2007-11-24Clarify how MONEY trims off trailing thousands separator.Bruce Momjian
2007-11-24Make the MONEY data type have a thousands separator != decimal symbol,Bruce Momjian
if the locale has the thousands separator as "". This now matches the to_char and psql numericlocale behavior. (Previously this data type was basically useless for such setups.)
2007-11-23Fix white space in MONEY type code. Rename 'comma' to more genericBruce Momjian
'ssymbol' as used in previous function.
2007-11-22Add more comments about thousands separator handling.Bruce Momjian
2007-11-22Add comments about thousands separator logic.Bruce Momjian
2007-11-21When setting default thousands separator when locale has "", use logicBruce Momjian
so new thousands separator doesn't match decimal symbol.
2007-11-21Fix typo in comment.Bruce Momjian
2007-11-20Fix bogus length calculation that could lead to crash if the stringTom Lane
happened to be right up against the end of memory, per report from Matt Magoffin. While at it, avoid useless multiple copying of string by not depending on xmlStrncatNew.
2007-11-16Fix tsvectorout() and tsqueryout() to escape backslesh, add test of that.Teodor Sigaev
Patch by Bruce Momjian <[email protected]> Backpatch is needed, but it's impossible to apply it directly
2007-11-16Small comment spacing improvement.Bruce Momjian
2007-11-16Run pgindent on remaining files now that LOOPBYTE is a usable macro.Bruce Momjian
2007-11-16Modify LOOPBYTE/LOOPBIT macros to be more logical; rather than have theBruce Momjian
for() body passed as a parameter, make the macros act as simple headers to code blocks. This allows pgindent to be run on these files.
2007-11-15Fix pgindent to properly handle 'else' and single-line comments on theBruce Momjian
same line; previous fix was only partial. Re-run pgindent on files that need it.
2007-11-15Re-run pgindent with updated list of typedefs. (Updated README shouldBruce Momjian
avoid this problem in the future.)
2007-11-15pgindent run for 8.3.Bruce Momjian
2007-11-14Add a rank/(rank+1) normalization option to ts_rank(). While the usefulnessTom Lane
of this seems a bit marginal, if it's useful enough to be shown in the manual then we probably ought to support doing it without double evaluation of the ts_rank function. Per my proposal earlier today.
2007-11-13Resurrect the code for the rewrite(ARRAY[...]) aggregate function,Tom Lane
and put it into contrib/tsearch2 compatibility module.
2007-11-10Add missing closing / in xsd:restriction, and remove some unnecessaryTom Lane
spaces for consistency. Per bug #3734 from Ben Leslie; fix by Euler Taveira de Oliveira.
2007-11-10xmlGetUTF8Char()'s second argument is both input and output. FixTom Lane
uninitialized value, and avoid invoking the function nine separate times in the pg_xmlIsNameChar macro. Should resolve buildfarm failures. Per report from Ben Leslie.
2007-11-09Second pass at improving LIKE/regex estimation in non-C locales. It turnsTom Lane
out that it's actually quite likely that a string that is an extension of the given prefix will sort as larger than the "greater" string our previous code created. To provide some defense against that, do the comparisons against a modified string instead of just the bare prefix. We tack on "Z", "z", "y", or "9", whichever is seen as largest in the current locale. Testing suggests that this is sufficient at least for cases involving ASCII data.
2007-11-09Allow XML processing instructions starting with "xml" while prohibitingPeter Eisentraut
those being exactly "xml". Bug #3735 from Ben Leslie
2007-11-08After conferencing again with Bruce, put in more accurate XML error message.Peter Eisentraut
2007-11-08Improve error messagePeter Eisentraut
2007-11-07Improve the performance of LIKE/regex estimation in non-C locales, by makingTom Lane
make_greater_string() try harder to generate a string that's actually greater than its input string. Before we just assumed that making a string that was memcmp-greater was enough, but it is easy to generate examples where this is not so when the locale is not C. Instead, loop until the relevant comparison function agrees that the generated string is greater than the input. Unfortunately this is probably not enough to guarantee that the generated string is greater than all extensions of the input, so we cannot relax the restriction to C locale for the LIKE/regex index optimization. But it should at least improve the odds of getting a useful selectivity estimate in prefix_selectivity(). Per example from Guillaume Smet. Backpatch to 8.1, mainly because that's what the complainant is using...
2007-11-07Fix patternsel() and callers to do the right thing for NOT LIKE and the otherTom Lane
negated-match operators. patternsel had been using the supplied operator as though it were a positive-match operator, and thus obtaining a wrong result, which was even more wrong after the caller subtracted it from 1. Seems cleanest to give patternsel an explicit "negate" argument so that it knows what's going on. Also install the same factorization scheme for pattern join selectivity estimators; even though they are just stubs at the moment, this may keep someone from making the same type of mistake when they get filled out. Per report from Greg Mullane. Backpatch to 8.2 --- previous releases do not show the problem because patternsel() doesn't actually use the operator directly.