summaryrefslogtreecommitdiff
path: root/src/backend/parser
AgeCommit message (Collapse)Author
2005-06-08Remove grammar productions for prefix and postfix % and ^ operators,Tom Lane
as well as the existing pg_catalog entries for prefix and postfix %. These have never been documented, though they did appear in one old regression test. This avoids surprising behavior in cases like "SELECT -25 % -10". Per recent discussion. Note: although there is a catalog change here, I did not force initdb since there's no harm in leaving the inaccessible entries in one's copy of pg_operator.
2005-06-05Remove planner's private fields from Query struct, and put them intoTom Lane
a new PlannerInfo struct, which is passed around instead of the bare Query in all the planning code. This commit is essentially just a code-beautification exercise, but it does open the door to making larger changes to the planner data structures without having to muck with the widely-known Query struct.
2005-06-05Replace the parser's namespace tree (which formerly had the sameTom Lane
representation as the jointree) with two lists of RTEs, one showing the RTEs accessible by qualified names, and the other showing the RTEs accessible by unqualified names. I think this is conceptually simpler than what we did before, and it's sure a whole lot easier to search. This seems to eliminate the parse-time bottleneck for deeply nested JOIN structures that was exhibited by phil@vodafone.
2005-06-04Add comment for multi-byte computation.Bruce Momjian
2005-06-04Change expandRTE() and ResolveNew() back to taking just the singleTom Lane
RTE of interest, rather than the whole rangetable list. This makes the API more understandable and avoids duplicate RTE lookups. This patch reverts no-longer-needed portions of my patch of 2004-08-19.
2005-06-03Revise handling of dropped columns in JOIN alias lists to avoid aTom Lane
performance problem pointed out by phil@vodafone: to wit, we were spending O(N^2) time to check dropped-ness in an N-deep join tree, even in the case where the tree was freshly constructed and couldn't possibly mention any dropped columns. Instead of recursing in get_rte_attribute_is_dropped(), change the data structure definition: the joinaliasvars list of a JOIN RTE must have a NULL Const instead of a Var at any position that references a now-dropped column. This costs nothing during normal parse-rewrite-plan path, and instead we have a linear-time update to make when loading a stored rule that might contain now-dropped columns. While at it, move the responsibility for acquring locks on relations referenced by rules into this separate function (which I therefore chose to call AcquireRewriteLocks). This saves effort --- namely, duplicated lock grabs in parser and rewriter --- in the normal path at a cost of one extra non-locked heap_open() in the stored-rule path; seems a good tradeoff. A fringe benefit is that it is now *much* clearer that we acquire lock on relations referenced in rules before we make any rewriter decisions based on their properties. (I don't know of any bug of that ilk, but it wasn't exactly clear before.)
2005-06-02The no-lexer-backup speedup hadn't been there a week before somebodyTom Lane
broke it. Maybe we do need an automated check ...
2005-06-02Add support for \x hex escapes in backend strings. Octal was alreadyBruce Momjian
supported. This follows the C standard escapes.
2005-05-31ParseComplexProjection should make use of expandRecordVariable so thatTom Lane
it can handle cases like (foo.x).y where foo is a subquery and x is a function-returning-RECORD RTE in that subquery.
2005-05-30Change the UNKNOWN type to have an internal representation matchingTom Lane
cstring, rather than text, so as to eliminate useless conversions inside the parser. Per recent discussion.
2005-05-29Remove typeidIsValid() checks in can_coerce_type(). These checksTom Lane
were pretty expensive and I believe the case they were put in to defend against can no longer arise, now that we have dependency checks to prevent deletion of a type entry that is still referenced. Certainly the example given in the CVS log entry can't happen anymore. Since this was the only use of typeidIsValid(), remove the routine too.
2005-05-29expandRTE and get_rte_attribute_type mistakenly always imputed typmod -1Tom Lane
to columns of an RTE that was a function returning RECORD with a column definition list. Apparently no one has tried to use non-default typmod with a function returning RECORD before.
2005-05-26Tweak the backend scanner (and psqlscan.l, which must track the backendTom Lane
scanner anyway) to avoid having any backup states. According to the flex manual, this should speed things up, and indeed the backend scanner is about a third faster according to some quick profiling checks. I haven't tried to measure the speed change in psql, but it probably is similar.
2005-05-24Inserting 5 characters into char(10) does not produce 5 padding spacesTatsuo Ishii
if they are two-byte multibyte characters. Same thing can be happen if octet_length(multibyte_chars) == n where n is char(n). Long standing bug since 7.3 days. Per report and fix from Yoshiyuki Asaba.
2005-05-07Add COPY WITH CVS HEADER to allow a heading line as the first line inBruce Momjian
COPY. Andrew Dunstan
2005-05-06Update comment to mention "Name classification hierarchy" as place toBruce Momjian
check for reserved words.
2005-05-05Allow implicit cast from any named composite type to RECORD. At theTom Lane
moment this has no particular use except to allow table rows to be passed to record_out(), but that case seems to be useful in itself per recent example from Elein. Further down the road we could look at letting PL functions be declared to accept RECORD parameters.
2005-04-28Implement sharable row-level locks, and use them for foreign key referencesTom Lane
to eliminate unnecessary deadlocks. This commit adds SELECT ... FOR SHARE paralleling SELECT ... FOR UPDATE. The implementation uses a new SLRU data structure (managed much like pg_subtrans) to represent multiple- transaction-ID sets. When more than one transaction is holding a shared lock on a particular row, we create a MultiXactId representing that set of transactions and store its ID in the row's XMAX. This scheme allows an effectively unlimited number of row locks, just as we did before, while not costing any extra overhead except when a shared lock actually has to be shared. Still TODO: use the regular lock manager to control the grant order when multiple backends are waiting for a row lock. Alvaro Herrera and Tom Lane.
2005-04-25On further experimentation, there were still a couple of bugs inTom Lane
ExpandIndirectionStar() ... and in markTargetListOrigin() too.
2005-04-25Fix ExpandIndirectionStar to handle cases where the expression to beTom Lane
expanded is of RECORD type, eg 'select (foo).* from (select foo(f1) from t1) ss' where foo() is a function declared with multiple OUT parameters.
2005-04-23Remove useless argtype_inherit() code, and make consequent simplifications.Tom Lane
As I pointed out a few days ago, this code has failed to do anything useful for some time ... and if we did want to revive the capability to select functions by nearness of inheritance ancestry, this is the wrong place and way to do it anyway. The knowledge would need to go into func_select_candidate() instead. Perhaps someday someone will be motivated to do that, but I am not today.
2005-04-23Allow -2147483648 to be treated as an INT4 rather than INT8 constant.Tom Lane
Per discussion with Paul Edwards.
2005-04-23Define the right-hand input of AT TIME ZONE as a full a_expr instead ofTom Lane
c_expr. Perhaps the restriction was once needed to avoid bison errors, but it seems to work just fine now --- and even generates a slightly smaller state machine. This change allows examples like SELECT '13:45'::timetz AT TIME ZONE '-07:00'::interval; to work without parentheses around the right-hand input.
2005-04-14Completion of project to use fixed OIDs for all system catalogs andTom Lane
indexes. Replace all heap_openr and index_openr calls by heap_open and index_open. Remove runtime lookups of catalog OID numbers in various places. Remove relcache's support for looking up system catalogs by name. Bulky but mostly very boring patch ...
2005-04-13Change addRangeTableEntryForRelation() to take a Relation pointer insteadTom Lane
of just a relation OID, thereby not having to open the relation for itself. This actually saves code rather than adding it for most of the existing callers, which had the rel open already. The main point though is to be able to use this rather than plain addRangeTableEntry in setTargetTable, thus saving one relation_openrv/relation_close cycle for every INSERT, UPDATE, or DELETE. Seems to provide a several percent win on simple INSERTs.
2005-04-07Add a "USING" clause to DELETE, which is equivalent to the FROM clauseNeil Conway
in UPDATE. We also now issue a NOTICE if a query has _any_ implicit range table entries -- in the past, we would only warn about implicit RTEs in SELECTs with at least one explicit RTE. As a result of the warning change, 25 of the regression tests had to be updated. I also took the opportunity to remove some bogus whitespace differences between some of the float4 and float8 variants. I believe I have correctly updated all the platform-specific variants, but let me know if that's not the case. Original patch for DELETE ... USING from Euler Taveira de Oliveira, reworked by Neil Conway.
2005-04-06Merge Resdom nodes into TargetEntry nodes to simplify code and save aTom Lane
few palloc's. I also chose to eliminate the restype and restypmod fields entirely, since they are redundant with information stored in the node's contained expression; re-examining the expression at need seems simpler and more reliable than trying to keep restype/restypmod up to date. initdb forced due to change in contents of stored rules.
2005-03-31First phase of OUT-parameters project. We can now define and use SQLTom Lane
functions with OUT parameters. The various PLs still need work, as does pg_dump. Rudimentary docs and regression tests included.
2005-03-29Fix grammar for IN/OUT/INOUT parameters. This commit doesn't actuallyTom Lane
implement any new feature, it just pushes the 'not implemented' error message deeper into the backend. I also tweaked the grammar to accept Oracle-ish parameter syntax (parameter name first), as well as the SQL99 standard syntax (parameter mode first), since it was easy and people will doubtless try to use both anyway.
2005-03-29Officially decouple FUNC_MAX_ARGS from INDEX_MAX_KEYS, and set theTom Lane
former to 100 by default. Clean up some of the less necessary dependencies on FUNC_MAX_ARGS; however, the biggie (FunctionCallInfoData) remains.
2005-03-29Convert oidvector and int2vector into variable-length arrays. ThisTom Lane
change saves a great deal of space in pg_proc and its primary index, and it eliminates the former requirement that INDEX_MAX_KEYS and FUNC_MAX_ARGS have the same value. INDEX_MAX_KEYS is still embedded in the on-disk representation (because it affects index tuple header size), but FUNC_MAX_ARGS is not. I believe it would now be possible to increase FUNC_MAX_ARGS at little cost, but haven't experimented yet. There are still a lot of vestigial references to FUNC_MAX_ARGS, which I will clean up in a separate pass. However, getting rid of it altogether would require changing the FunctionCallInfoData struct, and I'm not sure I want to buy into that.
2005-03-26Use a bitmapset instead of a list for duplicate-column checking inTom Lane
checkInsertTargets(). Avoids O(N^2) behavior on wide target lists.
2005-03-14Allow ALTER FUNCTION to change a function's strictness, volatility, andNeil Conway
whether or not it is a security definer. Changing a function's strictness is required by SQL2003, and the other capabilities make sense. Also, allow an optional RESTRICT noise word to be specified, for SQL conformance. Some trivial regression tests added and the documentation has been updated.
2005-03-11Add fprintf() custom version to libpgport.Bruce Momjian
Document use of macros for pg_printf functions. Bump major versions of all interfaces to handle movement of get_progname from libpq to libpgport in 8.0, and probably other libpgport changes in 8.1.
2005-03-10Make the behavior of HAVING without GROUP BY conform to the SQL spec.Tom Lane
Formerly, if such a clause contained no aggregate functions we mistakenly treated it as equivalent to WHERE. Per spec it must cause the query to be treated as a grouped query of a single group, the same as appearance of aggregate functions would do. Also, the HAVING filter must execute after aggregate function computation even if it itself contains no aggregate functions.
2005-02-22Use _() macro consistently rather than gettext(). Add translationBruce Momjian
macros around strings that were missing them.
2005-02-19Ensure that the resolved datatype of any unknown Param is propagatedTom Lane
into the sub-SELECT targetlist when it appears in the context INSERT INTO foo SELECT $1 ... Per report from Abhijit Menon-Sen.
2005-02-02Add support for temporary views, including documentation and regressionNeil Conway
tests. Contributed by Koju Iijima, review from Neil Conway, Gavin Sherry and Tom Lane. Also, fix error in description of WITH CHECK OPTION clause in the CREATE VIEW reference page: it should be "CASCADED", not "CASCADE".
2005-01-27Generalize TRUNCATE to support truncating multiple tables in oneTom Lane
command. This is useful because we can allow truncation of tables referenced by foreign keys, so long as the referencing table is truncated in the same command. Alvaro Herrera
2005-01-19Refactor transformExpr() by creating separate functions for most of theNeil Conway
expression types.
2005-01-13get_names_for_var didn't do recursion for unnamed JOIN vars quite right;Tom Lane
got it wrong when the JOIN was in an outer query level. Per example from Laurie Burrow. Also fix same issue in markTargetListOrigin. I think the latter is only a latent bug since we currently don't apply markTargetListOrigin except at the outer level ... but should do it right anyway.
2005-01-12Re-allow an untyped literal as the test expression of a CASE, ieTom Lane
CASE 'a' WHEN 'a' THEN 1 ELSE 2 END. This worked in 7.4 and before but had been broken due to premature freezing of the type of the test expression. Per gripe from GÄbor SzÃcs.
2004-12-31Tag appropriate files for rc3PostgreSQL Daemon
Also performed an initial run through of upgrading our Copyright date to extend to 2005 ... first run here was very simple ... change everything where: grep 1996-2004 && the word 'Copyright' ... scanned through the generated list with 'less' first, and after, to make sure that I only picked up the right entries ...
2004-12-15Disallow SETOF in the input of parseTypeString(). Formerly it wasTom Lane
silently ignored, allowing one to write bizarre things like DECLARE x setof int; in plpgsql. This has misled at least one novice into thinking that plpgsql variables could be sets ...
2004-12-11Instead of supposing (wrongly, in the general case) that the rowtypeTom Lane
of an inheritance child table is binary-compatible with the rowtype of its parent, invent an expression node type that does the conversion correctly. Fixes the new bug exhibited by Kris Shannon as well as a lot of old bugs that would only show up when using multiple inheritance or after altering the parent table.
2004-11-16Prevent a backend crash when processing CREATE TABLE commands withNeil Conway
more than 65K columns, or when the created table has more than 65K columns due to adding inherited columns from parent relations. Fix a similar crash when processing SELECT queries with more than 65K target list entries. In all three cases we would eventually detect the error and elog, but the check was being made too late.
2004-11-08Kris Jurka pointed out that the qualified_name production wasn'tTom Lane
working as intended --- for some reason, FROM a.b.c was getting parsed as if it were a function name and not a qualified name. I think there must be a bug in bison, because it should have complained that the grammar was ambiguous. Anyway, fix it along the same lines previously used for func_name vs columnref, and get rid of the right-recursion in attrs that seems to have confused bison.
2004-11-06When implementing a coercion to a domain type with a combinedTom Lane
type-and-length coercion function, make sure that the coercion function is told the correct typmod. Fixes Kris Jurka's example of a domain over bit(N).
2004-11-05Create 'default_tablespace' GUC variable that supplies a TABLESPACETom Lane
clause implicitly whenever one is not given explicitly. Remove concept of a schema having an associated tablespace, and simplify the rules for selecting a default tablespace for a table or index. It's now just (a) explicit TABLESPACE clause; (b) default_tablespace if that's not an empty string; (c) database's default. This will allow pg_dump to use SET commands instead of tablespace clauses to determine object locations (but I didn't actually make it do so). All per recent discussions.
2004-10-25Make error message more verbose, in hopes of avoiding misunderstandingsTom Lane
such as bug #1293.