1
0
mirror of synced 2024-12-14 23:26:04 +03:00
Commit Graph

411 Commits

Author SHA1 Message Date
Benjamin Eberlei
8f589e5876 Merge pull request #92 from mridgway/DDC-1275
DDC-1275: Added join columns to result set mapping
2011-07-28 14:18:55 -07:00
Michael Ridgway
1250cd7a5a F[DDC-1275] ixed check for owning side of a toOne relationship 2011-07-28 10:50:22 -04:00
Benjamin Eberlei
196632978c DDC-1298 - Fix bug in SQLWalker with derived entities that have no fields of their own. 2011-07-27 23:22:20 +02:00
Michael Ridgway
154fd60d85 DDC-1275: Added join columns to result set mapping 2011-07-26 17:35:06 -04:00
Alexander
6cf7bdc2b7 Merge branch 'master' into DDC-551 2011-07-26 17:26:00 +02:00
Alexander
65f7e897b5 [DDC-1294] Add discriminator information to subselects 2011-07-26 00:19:26 +02:00
Alexander
4266ab77b2 [DDC-551] Added __toString() method to SQLFilter 2011-07-22 14:55:00 +02:00
Alexander
4cf63a4e83 [DDC-551] Fixed the escaping of filter parameters 2011-07-22 14:51:30 +02:00
Alexander
d1908f7207 [DDC-551] Keep filter parameters and enabled filters sorted for hashing 2011-07-22 14:36:14 +02:00
Alexander
277fc751b6 [DDC-551] Added tests for SQLFilter 2011-07-22 13:51:26 +02:00
Alexander
b867744f15 [DDC-551] Added tests for SQLFilter functionality + small fixes 2011-07-22 13:08:49 +02:00
Alexander
a85902b08d [DDC-551] Initial code for filter functionality 2011-07-22 12:01:33 +02:00
Guilherme Blanco
550fcbc17f [DDC-1237] Fixed issue with QueryBuilder where user may have includes nested complex expression in a string format while consuming a composite expression (AND or OR). 2011-07-03 01:48:18 -03:00
Benjamin Eberlei
ed516edf90 Fix discriminator casing problem in Oracle 2011-06-26 17:49:34 +02:00
Benjamin Eberlei
c7c430032c DDC-1211 - Fix bug with empty numeric literal 2011-06-19 10:17:35 +02:00
Guilherme Blanco
699ccfddb6 Implemented COALESCE and NULLIF support in DQL. 2011-06-17 16:16:22 -03:00
Guilherme Blanco
626e467a17 Implemented COALESCE and NULLIF support in DQL. 2011-06-17 16:15:19 -03:00
Benjamin Eberlei
1038a866a4 DDC-1194 - Improve error handling for DQL INSTANCE OF 2011-06-05 10:48:21 +02:00
Benjamin Eberlei
9ea03de84f DDC-1080 - Fix bug with hydration of derived entities/foreign key as primary key. 2011-05-17 23:42:24 +02:00
Guilherme Blanco
8e3fdc5adc [DDC-1148] Implement auto-inference of types in setParameter. 2011-05-12 23:05:45 -03:00
Guilherme Blanco
905e05cd36 [DDC-1067][DDC-1145] Fixed bug with multiple froms and inclusion of joins. Added support for index by in QueryBuilder. This break BC only if users are using base support (->add). 2011-05-11 21:40:27 -03:00
Guilherme Blanco
54a0109d5d [DDC-1147] Allowed usage of 0-based input parameters in DQL. 2011-05-11 17:30:42 -03:00
Guilherme Blanco
b025b2b343 Fixed where componentes (ie. MEMBER OF) that that are sensitive to parenthesis presence. Made OR and AND expressions smarter. Fixed related unit tests. 2011-05-07 20:14:04 -03:00
Benjamin Eberlei
c53baa9935 [DDC-1091] Fix bug with custom string functions in StringPrimary 2011-05-01 11:01:30 +02:00
Benjamin Eberlei
85d6b9fd39 Merge pull request #42 from mridgway/DDC-1059.
DDC-1059: RSM Helper
2011-04-30 15:01:25 -07:00
Benjamin Eberlei
67b89eaa4f [DDC-1108] Fix bug with single char named input parameters in DQL lexer. 2011-04-30 12:27:16 +02:00
Michael Ridgway
af4cf0d0ba Replaced prefix parameter with renamedColumns; Added exception when duplicate columns found 2011-04-14 20:55:03 -04:00
Chekote
5784c7bacd Fixed phpdoc on Parser::match incorrectly stating that the token parameter can be a string value 2011-04-01 12:54:12 -05:00
Michael Ridgway
b1b17376ff Removing left over class import 2011-03-31 17:22:13 -04:00
Michael Ridgway
c46d835146 Moved new functions to ResultSetMappingBuilder class 2011-03-30 10:27:31 -04:00
Michael Ridgway
20dc72ef9a First pass on RSM helper functions for adding entities 2011-03-29 20:35:01 -04:00
Benjamin Eberlei
bda15231da [DDC-1077] Bugfix in not handling literals in Select Expressions. 2011-03-27 21:10:50 +02:00
Benjamin Eberlei
6ed0ff0a12 [DDC-1079] Bugfix for shortcut for ArithmeticExpressions in SimpleSelectExpression that lead to literals not being valid. Problem was that ScalarExpression() did not handle AggregateExpressions() at all, which is now fixed. 2011-03-27 14:04:53 +02:00
Benjamin Eberlei
4f1af0114f [DDC-1014] Add DATE_ADD(), DATE_SUB(), DATE_DIFF() functions for DQL. 2011-03-27 12:18:47 +02:00
Benjamin Eberlei
edfdbe10a0 [DDC-1053] Fix bug with usage of identification variables in GroupByItem. 2011-03-20 14:07:33 +01:00
Guilherme Blanco
834203d868 [DDC-1012] Implemented Expr isNull and isNotNull. 2011-02-20 01:53:55 -03:00
Guilherme Blanco
505d9e2154 [DDC-1036] Modified the AggregateExpressions to support SimpleArithmeticExpression instead of StateFieldPathExpression. 2011-02-20 01:44:05 -03:00
Guilherme Blanco
70d2cbe857 [DDC-982] Implemented more unique sql table alias. 2011-02-20 01:30:58 -03:00
Guilherme Blanco
dcf358f154 Fixed some warnings from phpunit. 2011-02-19 19:50:58 -02:00
Benjamin Eberlei
7390030854 Merge branch 'DDC-250' 2011-02-05 11:44:00 +01:00
Benjamin Eberlei
9768d08458 [DDC-250] Add tests and fix some glitches and finalized index-by patch. 2011-02-05 11:42:10 +01:00
Benjamin Eberlei
61e2cdc6b0 [DDC-1018] Bugfix: INDEX BY was not working in JOIN Declarations, only in FROM. 2011-02-05 10:04:18 +01:00
Benjamin Eberlei
4532c2255a [DDC-1018] Bugfix: INDEX BY was not working in JOIN Declarations, only in FROM. 2011-02-05 10:02:37 +01:00
Benjamin Eberlei
078e19d1c7 DDC-980 - Fix Update and Delete statements reference of the root table when doing subselects. 2011-01-13 21:16:08 +01:00
Benjamin Eberlei
c2bbaa9ead DDC-117 - Slight changes in the patch and fixing inline comments. 2011-01-01 18:53:22 +01:00
Benjamin Eberlei
194a90923d DDC-117 - Finalize patch, fix all the problems of different use-cases by hugely expanding the test-model. 2011-01-01 18:17:19 +01:00
Benjamin Eberlei
e7b4dca611 Merge master into DDC-117 2010-12-28 17:27:47 +01:00
Benjamin Eberlei
fe672d2f61 DDC-617 - Throw error if selecting identification variables without picking at least one root entity alias. 2010-12-28 10:17:33 +01:00
Benjamin Eberlei
5e788a0b84 DDC-915 - Bugfix in Identification Variable reordering in combination with SQL Walkers. 2010-12-08 23:42:02 +01:00
Pascal Borreli
0ba9321f06 [ORM] Fixed typo 2010-11-30 02:50:34 +08:00
Juozas Kaziukenas
494bfc8966 Fixed length, lower, upper and mod AST functions to use platform for generating SQL 2010-11-16 15:41:41 -08:00
Benjamin Eberlei
d3d3032759 DDC-736 - Simplified patch and extended test to verify scalar results are still in order. 2010-11-13 09:52:35 +01:00
Benjamin Eberlei
e4280cf82e DDC-736 - Fix ordering of identification variables in DQL parser to be by specification. 2010-11-11 21:12:09 +01:00
Benjamin Eberlei
5bd8ffa53c Merge master into DDC-117 2010-08-27 22:27:00 +02:00
Roman S. Borschel
d0717ee458 Fixed typo and simplified method as mentioned in an earlier comment. 2010-08-24 17:17:58 +02:00
Benjamin Eberlei
1496250833 Merge branch 'master' into DDC-117 2010-08-15 20:17:56 +02:00
Benjamin Eberlei
fb44fa6b5a Fix hydration of Assoc-Id Entities, duplicate the hydration of the foreign key once for for use with the assoc-entity as a meta-column. Added isIdentifier capabilities to meta columns. 2010-08-15 18:58:25 +02:00
Guilherme Blanco
496a34a4d2 [DDC-581] Implemented support to SingleValuedPathExpression to InExpression. 2010-08-12 00:16:07 -03:00
Guilherme Blanco
84b9eda17c [DDC-680] Implemented support to complex mathematical expression in subselect part aswell as improved support of comparison expressions. 2010-08-11 23:12:44 -03:00
Roman S. Borschel
8d3e0e61ea Moved association mappings to plain arrays, just like field mappings. 2010-08-09 22:48:07 +02:00
Roman S. Borschel
0424d87099 [DDC-386][DDC-675] Fixed. 2010-08-08 15:03:40 +02:00
Benjamin Eberlei
f2715c9af4 DDC-654 - Removed unused lines of code in AST/Functions namespace 2010-08-08 11:49:39 +02:00
Guilherme Blanco
35af98260a [DDC-719] Fixed issue with Empty and also Size function that were generating an incorrect SQL for associations counting. 2010-08-06 13:01:06 -03:00
Jonathan H. Wage
623c02c7dc Updating common to 2.0.0BETA4 2010-08-02 16:40:52 -05:00
Roman S. Borschel
0c07b31136 Tweaked INSTANCE OF implementation. 2010-07-30 17:56:11 +02:00
Guilherme Blanco
c1fec32f58 [2.0][DDC-482] Added support to INSTANCE OF in DQL. 2010-07-30 01:30:02 -03:00
Guilherme Blanco
d2740f0e77 Reverted extensibility of Lexer. This is not ideal. 2010-07-27 01:20:31 -03:00
Guilherme Blanco
2a7a72b3f9 Reverted extensibility of Lexer. This is not ideal. 2010-07-27 01:19:51 -03:00
Guilherme Blanco
b477211b4b [DDC-490] Added extensibility support to Query Lexer. 2010-07-26 01:24:46 -03:00
Guilherme Blanco
ad115f0ac8 [DDC-698] Fixed wrong SQL generation of m2m with starting path on inverse side. 2010-07-26 01:13:03 -03:00
Guilherme Blanco
d50b3c42e2 [DDC-619] Removed support to complex PathExpressions. 2010-07-23 01:55:33 -03:00
Guilherme Blanco
2c28872af8 [2.0][DDC-614] Added support to multiple FROM identification variables. Also, fixed bug with missing lock on subselect. 2010-07-20 00:51:01 -03:00
Roman S. Borschel
e7ac35ed95 [DDC-119] Fixed. 2010-07-15 15:55:45 +02:00
Roman S. Borschel
a1c13b58d3 Fixed behavior of PersistentCollection#clear(). Fixed single-valued association path expression support in DQL UpdateItems. 2010-07-08 17:30:39 +02:00
Roman S. Borschel
88b0813536 Improved entity state detection. 2010-07-06 11:43:14 +02:00
Benjamin Eberlei
552865a867 DDC-649 - Remove IN queries for empty discriminator values if abstract base class is not part of the discriminator map 2010-07-04 13:34:41 +02:00
beberlei
6ba4fa002b DDC-660 - Fix notIn() not quoting passed literals correctly. 2010-07-01 21:42:38 +02:00
Benjamin Eberlei
c1091485b0 DDC-618 - Bugfix INDEX BY was not yet implemented in SqlWalker 2010-06-29 00:06:19 +02:00
Jonathan H. Wage
d27733f690 [DDC-613] Fixing issue with using function expressions in select not being allowed 2010-06-16 11:55:22 -04:00
David Abdemoulaie
ece0e3ad88 Third parameter to Expr::substring is now optional 2010-05-25 15:11:35 -05:00
David Abdemoulaie
b6a5402bcb Query\Expr::_quoteLiteral properly quotes numeric strings 2010-05-25 13:41:02 -05:00
Roman S. Borschel
a45560dbd0 [DDC-505] Fixed and small lexer simplifcations that were marked as todo. 2010-05-18 22:19:08 +02:00
Roman S. Borschel
3cbee1fa09 Merge commit 'upstream/master' 2010-05-16 13:30:48 +02:00
Roman S. Borschel
3045507a9b [DDC-593] Fixed. 2010-05-16 13:30:40 +02:00
Benjamin Eberlei
ad402c6ded DDC-178 DQL Optimistic Lock now requires ALL classes to be versioned, otherwise throws exception 2010-05-15 11:53:28 +02:00
Benjamin Eberlei
78328ec6ea DDC-178 - Removed Doctrine\ORM\LockMode in favour of Doctrine\DBAL\LockMode 2010-05-15 11:48:20 +02:00
Benjamin Eberlei
64b57bbcfb Merge upstream into lock-support branch 2010-05-15 09:41:32 +02:00
Benjamin Eberlei
f65a555d04 Merge Upstream into Locking-Branch 2010-05-02 13:02:44 +02:00
Guilherme Blanco
4ab5dffc4c Fixed UnitOfWork and isRollbackOnly flag. 2010-05-01 11:49:14 -03:00
Benjamin Eberlei
604ed962e5 Merged Master into IBM DB2 branch 2010-05-01 04:07:32 +02:00
Guilherme Blanco
50f3435e84 Optimized Query AST resultant of the parsing process phase 1 2010-04-29 22:15:36 -03:00
Roman S. Borschel
bff4f49b7a Merge commit 'upstream/master'
Conflicts:
	lib/Doctrine/Common/Annotations/AnnotationReader.php
	lib/Doctrine/Common/Annotations/Parser.php
2010-04-26 13:17:36 +02:00
Roman S. Borschel
760ea34a0c [DDC-497][DDC-500][DDC-342] Fixed. Persister polishing and refactoring. More to come for that, but after beta1. 2010-04-26 13:02:30 +02:00
Guilherme Blanco
841008c461 [2.0] Coding Standards fixes, added missing docblocks, removed some dependencies from Common package (in Annotations component), etc. 2010-04-23 00:51:32 -03:00
Guilherme Blanco
7006f4dd74 Merge commit 'upstream/master' 2010-04-22 11:35:18 -03:00
Guilherme Blanco
5ecca4f5e0 [2.0][DDC-524] Fixed issue with UPDATE/DELETE statements generating wrong SQL when using Association Paths. 2010-04-22 11:32:01 -03:00
Benjamin Eberlei
c763b47626 Merge commit 'dc2master/master' into lock-support 2010-04-21 20:30:41 +02:00
Benjamin Eberlei
024b2bab91 DDC-496 Finished first versions of platform and schema manager for DB2, DDC-528 Added support for PDO_IBM driver, passing all but 3 tests that are related to CLOB fields 2010-04-18 19:12:38 +02:00
Roman S. Borschel
4b39705cd4 Fixed case-sensitivity of custom DQL functions. 2010-04-15 20:14:03 +02:00
Roman S. Borschel
01c2c06bbf [DDC-512] Fixed. 2010-04-15 18:36:17 +02:00
Guilherme Blanco
955dc09cb9 [2.0] Optimized support to IdentificationVariable in ArithmeticPrimary 2010-04-14 22:03:29 -03:00
Guilherme Blanco
d045c6f6c1 Merge commit 'upstream/master' 2010-04-14 21:35:10 -03:00
Roman S. Borschel
d4232d906e [DDC-388] Fixed. 2010-04-14 17:07:08 +02:00
Roman S. Borschel
7fefe3f4b4 Merge commit 'upstream/master' 2010-04-14 10:50:37 +02:00
Guilherme Blanco
889094709e [2.0] Added support to IdentificationVariable that was missing in ArithmeticPrimary (it was not correctly handling it). Uncommented a unit test that added coverage to it. 2010-04-14 00:04:44 -03:00
Guilherme Blanco
56a8f5cd53 [2.0][DDC-448][DDC-513] Fixed issue with Joined Inheritance Type and One To One Associations. 2010-04-13 00:29:29 -03:00
Roman S. Borschel
db603547a2 Added failing test for DDC-388. Naming refactorings and comment cleanups. 2010-04-13 00:49:19 +02:00
Benjamin Eberlei
e6a44b145f [DDC-178] First approach to Locking support 2010-04-08 22:50:06 +02:00
beberlei
289ce4727b [2.0] DDC-492 - Allow access to ParserResult and Query in TreeWalkerAdapter 2010-04-04 22:24:37 +00:00
beberlei
95994f7a44 [2.0] DDC-341 - Added Composite Model-Set and 3 tests, fixed two bugs in SqlWalker with Composite Key support 2010-04-02 21:37:15 +00:00
guilhermeblanco
c9de54b4a2 [2.0] Changed Connection::execute() to Connection::executeQuery() as defined as a todo. 2010-03-31 21:13:34 +00:00
guilhermeblanco
9ae7671b26 [2.0] Added more verbosity when attempting to iterate through a fetch join. 2010-03-30 22:29:10 +00:00
romanb
354ede1e04 [2.0][DDC-354][DDC-425] Fixed. Encapsulated SQL logging better in the DBAL. Added binding types to DBAL mapping types as well as using these binding types in the persisters. Query and NativeQuery now support PDO binding types as well as DBAL mapping types when binding parameters. 2010-03-29 13:20:41 +00:00
beberlei
24d8e94280 [2.0] DDC-478 - Fix QueryBuilder Expr\Between Support 2010-03-28 10:30:43 +00:00
romanb
49621286a2 [2.0][DDC-479] Fixed. 2010-03-26 22:07:31 +00:00
guilhermeblanco
50c4e50921 [2.0][DDC-459] Moved Doctrine\ORM\AbstractQuery to Doctrine\ORM\Query\AbstractQuery, which is compatible with Doctrine Coding Standards 2010-03-23 17:53:38 +00:00
guilhermeblanco
b175427043 [2.0][DDC-458] Fixed issue with IN () support when providing numeric values separated by comma without spaces. 2010-03-23 17:42:34 +00:00
guilhermeblanco
34cbb8af24 [2.0] Fixed issue with DQL that was not considering input parameter 10. Also added support to retrieve the generated AST. 2010-03-16 19:21:59 +00:00
guilhermeblanco
29e5141280 [2.0] Reverted r7392 which generates broken SQL query. 2010-03-16 16:32:30 +00:00
guilhermeblanco
bb94f6ea7c [2.0] Fixed support to ResultVariable usage in ArithmeticExpression. 2010-03-16 15:02:43 +00:00
guilhermeblanco
0fde94ddcf [2.0] Fixed custom functions support that was failing to be processed. Also fixed syntax error of Function support. 2010-03-16 14:01:54 +00:00
guilhermeblanco
c7ac5650c2 [2.0] Fixed issue with Subselect not handling well inheritance type JOINED. 2010-03-15 19:04:14 +00:00
romanb
a53c2fbd6c [2.0] Code cleanups. Preparations for DDC-193. Fixed DDC-399, type configuration remains global for now but the irritating instance methods on the Configuration have been removed. Use Type::addType et al. Added TODOs for naming standards. 2010-03-15 17:19:00 +00:00
guilhermeblanco
3d34f266c6 [2.0][DDC-395] Applied the provided patch of Jordi Boggiano removing some trailing whitespaces and fixing missing public keywords 2010-03-09 01:47:45 +00:00
beberlei
64077ac65f [2.0] Add missing Query::HINT_CUSTOM_OUTPUT_WALKER - it wasn't possible to change the output walker before without extending and overwriting one large method in Query 2010-03-06 09:52:48 +00:00
romanb
df6ca602fb [2.0][DDC-92] Fixed. Patch provided by Christian Heinrich. [DDC-274] Started some method renaming. [DDC-142] Fixed (join column names and discriminator column names dont support quoting) [DDC-258] Fixed. 2010-03-05 16:35:00 +00:00
guilhermeblanco
4ac39f0cbd [2.0][DDC-379][DDC-384] Implemented Entity namespace alias support. 2010-03-03 01:30:00 +00:00
guilhermeblanco
a56689be67 [2.0] Reverted wrong changeset of commit related to 7246 2010-03-01 04:23:23 +00:00
guilhermeblanco
fc5960c489 [2.0][DDC-265] Partial support to inheritanceType in AnnotationExporter. Still needs to add the discriminator column. 2010-03-01 04:03:44 +00:00
guilhermeblanco
07fd878985 [2.0][DDC-382] Fixed wrong DQL function call. Thanks Ismo for report and patch. 2010-03-01 03:55:02 +00:00
beberlei
5bf169202f [2.0] DDC-370 - Fixed bug with CTI and scalar fields DDC-377 - Fixed failing Oracle test 2010-02-26 20:29:01 +00:00
jwage
7c81b0b003 [2.0] Adding support for entity aliases in the query language 2010-02-26 18:11:53 +00:00
beberlei
248022249f [2.0] DDC-375 - Fix a little bug in walkSimpleSelectExpression 2010-02-25 20:31:53 +00:00
beberlei
f14dd56907 [2.0] DDC-375 - Fix two issues related to DQL Subselects 2010-02-25 20:25:28 +00:00
romanb
1e6641565e [2.0][DDC-368] Fixed. 2010-02-24 22:05:40 +00:00
beberlei
81d02278ad [2.0] DDC-338 - Changed DQL Parser to comply with ordered collections when they are fetch joined (OMG, thanks to roman and guilherme for the detailed discussion on how to implement this) 2010-02-21 00:06:34 +00:00
romanb
22fce635c0 [2.0][DDC-339][DDC-340] Fixed. 2010-02-20 18:27:05 +00:00
romanb
639718e95c [2.0][DDC-335][DDC-347][DDC-317] Fixed. Also prepared DQL for CASE/COALESCE/NULLIF support. 2010-02-19 21:28:17 +00:00
beberlei
e83f1517ad [2.0] DDC-330 - Fix SIZE(collectionValueExpression) using a COUNT(field) to COUNT(*) because in many to many scenarios and with several join columns a COUNT(fieldA, fieldB) would have been generated, which is not valid sql. 2010-02-14 18:44:33 +00:00
beberlei
077d9fb0e6 [2.0] DDC-135 DDC-177 Implement missing WITH clause, disallow use of ON clause by throwing an exception 2010-02-14 09:53:38 +00:00
beberlei
8b2ca0d484 [2.0] DDC-325 - Fix Order of LOCATE to be LOCATE(needle, haystack [, offset]) 2010-02-11 23:02:21 +00:00
beberlei
6bfbab9f7d [2.0] DDC-325 - Fixed LOCATE() support for all platforms. 2010-02-11 22:38:23 +00:00
beberlei
13bf8a760f [2.0] DDC-322 - Fixed Trim across all platforms using AbstractPlatform::getTrimExpression() 2010-02-11 21:19:54 +00:00
beberlei
8357289050 [2.0] DDC-320 - Fixed Substring across all platforms using AbstractPlatform::getSubstringExpression() instead of the "hand-built" one. 2010-02-11 20:19:05 +00:00
beberlei
57ef5f5aeb [2.0] Added DQL Functions and Aggregate Functional Test-Case and fixed two small bugs in DQL Parser that came to light, also it seems that some of the functions are not supported by Oracle and Sqlite and some cases of SUBSTRING and TRIM produce bugs on MySQL. 2010-02-11 18:59:58 +00:00
guilhermeblanco
30f9403790 [2.0][DDC-308] Implemented SIZE() function support to many2many relations 2010-02-10 02:31:55 +00:00
guilhermeblanco
d642fb9642 [2.0][DDC-307] Fixed wrong generation of SQL when using MOD() function 2010-02-10 01:34:47 +00:00
romanb
4adc289596 [2.0][DDC-284] Fixed. API polish and some convention over configuration simplifications for join columns and join tables. 2010-02-09 17:13:49 +00:00
beberlei
da2c329e60 [2.0] Fix casing bug in Parser - IfFunction checks lower-case the function name, but register methods don't. 2010-02-07 22:55:26 +00:00
beberlei
005d3b432b [2.0] DDC-163 - Missing DQL Alias prefix for many-to-many table in SqlWalker lead to duplicate prefix generation in SQL statement when a many-to-many join table is used more than once. 2010-02-07 13:05:48 +00:00