summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt
AgeCommit message (Collapse)Author
2006-02-09Reject out-of-range dates in date_in().Tom Lane
Kris Jurka
2006-02-07Source code cleanup.Bruce Momjian
2006-02-07I think that NUMERIC datatype has a problem in the performance thatBruce Momjian
the format on Tuple(Numeric) and the format to calculate(NumericVar) are different. I understood that to reduce I/O. However, when many comparisons or calculations of NUMERIC are executed, the conversion of Numeric and NumericVar becomes a bottleneck. It is profile result when "create index on NUMERIC column" is executed: % cumulative self self total time seconds seconds calls s/call s/call name 17.61 10.27 10.27 34542006 0.00 0.00 cmp_numerics 11.90 17.21 6.94 34542006 0.00 0.00 comparetup_index 7.42 21.54 4.33 71102587 0.00 0.00 AllocSetAlloc 7.02 25.64 4.09 69084012 0.00 0.00 set_var_from_num 4.87 28.48 2.84 69084012 0.00 0.00 alloc_var 4.79 31.27 2.79 142205745 0.00 0.00 AllocSetFreeIndex 4.55 33.92 2.65 34542004 0.00 0.00 cmp_abs 4.07 36.30 2.38 71101189 0.00 0.00 AllocSetFree 3.83 38.53 2.23 69084012 0.00 0.00 free_var The create index command executes many comparisons of Numeric values. Functions other than comparetup_index spent a lot of cycles for conversion from Numeric to NumericVar. An attached patch enables the comparison of Numeric values without executing conversion to NumericVar. The execution time of that SQL becomes half. o Test SQL (index_test table has 1,000,000 tuples) create index index_test_idx on index_test(num_col); o Test results (executed the test five times) (1)PentiumIII original: 39.789s 36.823s 36.737s 37.752s 37.019s patched : 18.560s 19.103s 18.830s 18.408s 18.853s 4.07 36.30 2.38 71101189 0.00 0.00 AllocSetFree 3.83 38.53 2.23 69084012 0.00 0.00 free_var The create index command executes many comparisons of Numeric values. Functions other than comparetup_index spent a lot of cycles for conversion from Numeric to NumericVar. An attached patch enables the comparison of Numeric values without executing conversion to NumericVar. The execution time of that SQL becomes half. o Test SQL (index_test table has 1,000,000 tuples) create index index_test_idx on index_test(num_col); o Test results (executed the test five times) (1)PentiumIII original: 39.789s 36.823s 36.737s 37.752s 37.019s patched : 18.560s 19.103s 18.830s 18.408s 18.853s (2)Pentium4 original: 16.349s 14.997s 12.979s 13.169s 12.955s patched : 7.005s 6.594s 6.770s 6.740s 6.828s (3)Itanium2 original: 15.392s 15.447s 15.350s 15.370s 15.417s patched : 7.413s 7.330s 7.334s 7.339s 7.339s (4)Ultra Sparc original: 64.435s 59.336s 59.332s 58.455s 59.781s patched : 28.630s 28.666s 28.983s 28.744s 28.595s Atsushi Ogawa
2006-02-03Update random() usage so ranges are inclusive/exclusive as required.Bruce Momjian
2006-01-26Suppress signed-vs-unsigned-char warning.Tom Lane
2006-01-26Fix display of whole-row Var appearing at the top level of a SELECT list.Tom Lane
While we normally prefer the notation "foo.*" for a whole-row Var, that does not work at SELECT top level, because in that context the parser will assume that what is wanted is to expand the "*" into a list of separate target columns, yielding behavior different from a whole-row Var. We have to emit just "foo" instead in that context. Per report from Sokolov Yura.
2006-01-26Clean up the INET-vs-CIDR situation. Get rid of the internal is_cidr flagTom Lane
and rely exclusively on the SQL type system to tell the difference between the types. Prevent creation of invalid CIDR values via casting from INET or set_masklen() --- both of these operations now silently zero any bits to the right of the netmask. Remove duplicate CIDR comparison operators, letting the type rely on the INET operators instead.
2006-01-25Allow row comparisons to be used as indexscan qualifications.Tom Lane
This completes the project to upgrade our handling of row comparisons.
2006-01-25Update regression error message for NUMERIC range overflow. Display "1"Bruce Momjian
instead of 10^0.
2006-01-25Improve error message when NUMERIC precision is exceeded.Bruce Momjian
2006-01-23Prototype fix for typo.Bruce Momjian
2006-01-23Use is_cidr in INET/CIDR structure, rather than the generic 'type'.Bruce Momjian
2006-01-21Add GRANT ON SEQUENCE syntax to support sequence-only permissions.Bruce Momjian
Continue to support GRANT ON [TABLE] for sequences for backward compatibility; issue warning for invalid sequence permissions. [Backward compatibility warning message.] Add USAGE permission for sequences that allows only currval() and nextval(), not setval(). Mention object name in grant/revoke warnings because of possible multi-object operations.
2006-01-14Add selectivity-calculation code for RowCompareExpr nodes. Simplistic,Tom Lane
but a lot better than nothing at all ...
2006-01-11Create a standard function pg_sleep() to sleep for a specified amount of time.Tom Lane
Replace the former ad-hoc implementation used in the regression tests. Joachim Wieland
2006-01-11Cosmetic code cleanup: fix a bunch of places that used "return (expr);"Neil Conway
rather than "return expr;" -- the latter style is used in most of the tree. I kept the parentheses when they were necessary or useful because the return expression was complex.
2006-01-10Improve patternsel() by applying the operator itself to each valueTom Lane
listed in the column's most-common-values statistics entry. This gives us an exact selectivity result for the portion of the column population represented by the MCV list, which can be a big leg up in accuracy if that's a large fraction of the population. The heuristics involving pattern contents and prefix are applied only to the part of the population not included in the MCV list.
2006-01-02Don't assume that LC_MESSAGES is always available on WIN32. Per Magnus.Tom Lane
2005-12-30Repair EXPLAIN failure when trying to display a plan condition that involvesTom Lane
selection of a field from the result of a function returning RECORD. I believe this case is new in 8.1; it's due to the addition of OUT parameters. Per example from Michael Fuhr.
2005-12-28Arrange to set the LC_XXX environment variables to match our localeTom Lane
setup. This protects against undesired changes in locale behavior if someone carelessly does setlocale(LC_ALL, "") (and we know who you are, perl guys).
2005-12-28Mention "table" in "violates foreign key constraint" message that wasBruce Momjian
lacking it. Perhaps it was suppressed because of line length considerations, but "table" should appear.
2005-12-28Implement SQL-compliant treatment of row comparisons for < <= > >= casesTom Lane
(previously we only did = and <> correctly). Also, allow row comparisons with any operators that are in btree opclasses, not only those with these specific names. This gets rid of a whole lot of indefensible assumptions about the behavior of particular operators based on their names ... though it's still true that IN and NOT IN expand to "= ANY". The patch adds a RowCompareExpr expression node type, and makes some changes in the representation of ANY/ALL/ROWCOMPARE SubLinks so that they can share code with RowCompareExpr. I have not yet done anything about making RowCompareExpr an indexable operator, but will look at that soon. initdb forced due to changes in stored rules.
2005-12-25I have added these macros to c.h:Bruce Momjian
#define HIGHBIT (0x80) #define IS_HIGHBIT_SET(ch) ((unsigned char)(ch) & HIGHBIT) and removed CSIGNBIT and mapped it uses to HIGHBIT. I have also added uses for IS_HIGHBIT_SET where appropriate. This change is purely for code clarity.
2005-12-22Adjust string comparison so that only bitwise-equal strings are consideredTom Lane
equal: if strcoll claims two strings are equal, check it with strcmp, and sort according to strcmp if not identical. This fixes inconsistent behavior under glibc's hu_HU locale, and probably under some other locales as well. Also, take advantage of the now-well-defined behavior to speed up texteq, textne, bpchareq, bpcharne: they may as well just do a bitwise comparison and not bother with strcoll at all. NOTE: affected databases may need to REINDEX indexes on text columns to be sure they are self-consistent.
2005-12-10Teach deparsing of CASE expressions to cope with the simplified formsTom Lane
that simplify_boolean_equality() may leave behind. This is only relevant if the user writes something a bit silly, like CASE x=y WHEN TRUE THEN. Per example from Michael Fuhr; may or may not explain bug #2106.
2005-12-09Simplify lock manager data structures by making a clear separation betweenTom Lane
the data defining the semantics of a lock method (ie, conflict resolution table and ancillary data, which is all constant) and the hash tables storing the current state. The only thing we give up by this is the ability to use separate hashtables for different lock methods, but there is no need for that anyway. Put some extra fields into the LockMethod definition structs to clean up some other uglinesses, like hard-wired tests for DEFAULT_LOCKMETHOD and USER_LOCKMETHOD. This commit doesn't do anything about the performance issues we were discussing, but it clears away some of the underbrush that's in the way of fixing that.
2005-12-03Allow to_char(interval) and to_char(time) to use AM/PM specifications.Bruce Momjian
Map them to a single day, so '30 hours' is 'AM'. Have to_char(interval) and to_char(time) use "HH", "HH12" as 12-hour intervals, rather than bypass and print the full interval hours. This is neeeded because to_char(time) is mapped to interval in this function. Intervals should use "HH24", and document suggestion. Allow "D" format specifiers for interval/time.
2005-12-02Remove comment on errno=0 lines, but add mention to port/strtol.c function.Bruce Momjian
2005-12-01Add comment to pg_atoi.Bruce Momjian
2005-12-01Comment "errno = 0" in a more generic way.Bruce Momjian
2005-12-01Add comments about why errno is set to zero.Bruce Momjian
2005-12-01Check for overflow in strtol() while parsing datetime inputs.Tom Lane
Michael Fuhr.
2005-11-30Rearrange code in pg_atoi() to avoid assuming that isspace() cannotTom Lane
change errno. No reported bugs here, but why take a chance?
2005-11-25Teach planner and executor to handle ScalarArrayOpExpr as an indexableTom Lane
qualification when the underlying operator is indexable and useOr is true. That is, indexkey op ANY (ARRAY[...]) is effectively translated into an OR combination of one indexscan for each array element. This only works for bitmap index scans, of course, since regular indexscans no longer support OR'ing of scans. There are still some loose ends to clean up before changing 'x IN (list)' to translate as a ScalarArrayOpExpr; for instance predtest.c ought to be taught about it. But this gets the basic functionality in place.
2005-11-22Fix up comment munged by pg_indent. (Not pg_indent's fault; should haveTom Lane
protected comment with dashes the first time round.)
2005-11-22Re-run pgindent, fixing a problem where comment lines after a blankBruce Momjian
comment line where output as too long, and update typedefs for /lib directory. Also fix case where identifiers were used as variable names in the backend, but as typedefs in ecpg (favor the backend for indenting). Backpatch to 8.1.X.
2005-11-19Change array comparison rules to consider dimensionality information,Tom Lane
not only the array contents, before claiming two arrays are equal. Per recent discussion.
2005-11-19Change array_push and array_cat so that they retain the lower bound ofTom Lane
the array (for array_push) or higher-dimensional array (for array_cat) rather than decrementing it as before. This avoids generating lower bounds other than one for any array operation within the SQL spec. Per recent discussion. Interestingly, this seems to have been the original behavior, because while updating the docs I noticed that a large fraction of relevant examples were *wrong* for the old behavior and are now right. Is it worth correcting this in the back-branch docs?
2005-11-18Mop-up for nulls-in-arrays patch: fix some places that access arrayTom Lane
contents directly.
2005-11-17Make SQL arrays support null elements. This commit fixes the core arrayTom Lane
functionality, but I still need to make another pass looking at places that incidentally use arrays (such as ACL manipulation) to make sure they are null-safe. Contrib needs work too. I have not changed the behaviors that are still under discussion about array comparison and what to do with lower bounds.
2005-11-07R-tree is dead ... long live GiST.Tom Lane
2005-11-04Remove a gratuitous string difference (does not affect translations).Peter Eisentraut
2005-11-04Disregard superuserness when checking to see if a role GRANT wouldTom Lane
create circularity of role memberships. This is a minimum-impact fix for the problem reported by Florian Pflug. I thought about removing the superuser_arg test from is_member_of_role() altogether, as it seems redundant for many of the callers --- but not all, and it's way too late in the 8.1 cycle to be making large changes. Perhaps reconsider this later.
2005-10-29Update a couple of obsolete comments.Tom Lane
2005-10-29Message correctionsPeter Eisentraut
2005-10-27Add comment documenting actual failure case of usingBruce Momjian
interval_justify_hours in timestamp subtraction. TODO already has text description.
2005-10-25Remove justify_hours call from interval_mul and interval_div, and makeTom Lane
some small stylistic improvements in these functions. Also fix several places where TMODULO() was being used with wrong-sized quotient argument, creating a risk of overflow --- interval2tm was actually capable of going into an infinite loop because of this.
2005-10-22minor code cleanup - replace useless struct timezone argument toAndrew Dunstan
gettimeofday with NULL in a few places, making it consistent with usage elsewhere.
2005-10-20Adjust not-too-sane calculation of DDD value for to_char(interval).Tom Lane
Per gripe from Chris Matheson.
2005-10-18Code review for regexp_replace patch. Improve documentation and comments,Tom Lane
fix problems with replacement-string backslashes that aren't followed by one of the expected characters, avoid giving the impression that replace_text_regexp() is meant to be called directly as a SQL function, etc.