summaryrefslogtreecommitdiff
path: root/src/backend/parser
AgeCommit message (Collapse)Author
2005-07-28Make use of new list primitives list_append_unique and list_concat_uniqueTom Lane
where applicable.
2005-07-26Minor correction: cause ALTER ROLE role ROLE rolenames to behaveTom Lane
sensibly, even though we don't document it.
2005-07-26Add a role property 'rolinherit' which, when false, denotes that the roleTom Lane
doesn't automatically inherit the privileges of roles it is a member of; for such a role, membership in another role can be exploited only by doing explicit SET ROLE. The default inherit setting is TRUE, so by default the behavior doesn't change, but creating a user with NOINHERIT gives closer adherence to our current reading of SQL99. Documentation still lacking, and I think the information schema needs another look.
2005-07-25Add SET ROLE. This is a partial commit of Stephen Frost's recent patch;Tom Lane
I'm still working on the has_role function and information_schema changes.
2005-06-29More cleanup on roles patch. Allow admin option to be inherited throughTom Lane
role memberships; make superuser/createrole distinction do something useful; fix some locking and CommandCounterIncrement issues; prevent creation of loops in the membership graph.
2005-06-28Bring syntax of role-related commands into SQL compliance. To avoidTom Lane
syntactic conflicts, both privilege and role GRANT/REVOKE commands have to use the same production for scanning the list of tokens that might eventually turn out to be privileges or role names. So, change the existing GRANT/REVOKE code to expect a list of strings not pre-reduced AclMode values. Fix a couple other minor issues while at it, such as InitializeAcl function name conflicting with a Windows system function.
2005-06-28Replace pg_shadow and pg_group by new role-capable catalogs pg_authidTom Lane
and pg_auth_members. There are still many loose ends to finish in this patch (no documentation, no regression tests, no pg_dump support for instance). But I'm going to commit it now anyway so that Alvaro can make some progress on shared dependencies. The catalog changes should be pretty much done.
2005-06-26Add Oracle-compatible GREATEST and LEAST functions. Pavel StehuleTom Lane
2005-06-26Code review for escape-strings patch. Sync psql and plpgsql lexersTom Lane
with main, avoid using a SQL-defined SQLSTATE for what is most definitely not a SQL-compatible error condition, fix documentation omissions, adhere to message style guidelines, don't use two GUC_REPORT variables when one is sufficient. Nothing done about pg_dump issues.
2005-06-26Add E'' syntax so eventually normal strings can treat backslashesBruce Momjian
literally. Add GUC variables: "escape_string_warning" - warn about backslashes in non-E strings "escape_string_syntax" - supports E'' syntax? "standard_compliant_strings" - treats backslashes literally in '' Update code to use E'' when escapes are used.
2005-06-24Remove overspecification of precision of CURRENT_TIMESTAMP, LOCALTIMESTAMP,Tom Lane
CURRENT_TIME, and LOCALTIME: now they just produce "timestamptz" not "timestamptz(6)", etc. This makes the behavior more consistent with our choice to not assign a specific default precision to column datatypes. It should also save a few cycles at runtime due to not having to invoke the round-to-given-precision functions. I also took the opportunity to translate CURRENT_TIMESTAMP into "now()" instead of an invocation of the timestamptz input converter --- this should save a few cycles too.
2005-06-22Make REINDEX DATABASE do what one would expect, namely reindex all indexesTom Lane
in the database. The old behavior (reindex system catalogs only) is now available as REINDEX SYSTEM. I did not add the complementary REINDEX USER case since there did not seem to be consensus for this, but it would be trivial to add later. Per recent discussions.
2005-06-22Add a hack requested by the JDBC driver writers: when a function'sTom Lane
argument list contains parameter symbols ($n) declared as type VOID, discard these arguments. This allows the driver to avoid renumbering mixed IN and OUT argument placeholders (the JDBC syntax involves writing ? for both IN and OUT parameters, but on the server side we don't think that OUT parameters are arguments). This doesn't break any currently- useful cases since VOID is not used as an input argument type.
2005-06-17Two-phase commit. Original patch by Heikki Linnakangas, with additionalTom Lane
hacking by Alvaro Herrera and Tom Lane.
2005-06-15Move SYMMETRIC/ASYMMETRIC to reserved words to avoid shift/reduce conflicts.Bruce Momjian
2005-06-15Improve comment wording.Bruce Momjian
2005-06-14Add BETWEEN SYMMETRIC.Bruce Momjian
Pavel Stehule
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.