From: Mike Bayer Date: Sun, 4 Dec 2005 00:18:51 +0000 (+0000) Subject: primary_keys => primary_key X-Git-Tag: rel_0_1_0~266 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cec72fe1ccb1406f562b92afc023255c26116573;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git primary_keys => primary_key --- diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py index 85b687ad15..5490819476 100644 --- a/lib/sqlalchemy/ansisql.py +++ b/lib/sqlalchemy/ansisql.py @@ -340,7 +340,7 @@ class ANSISchemaGenerator(sqlalchemy.engine.SchemaIterator): separator = "\n" # if only one primary key, specify it along with the column - pks = table.primary_keys + pks = table.primary_key first_pk = False for column in table.columns: self.append(separator) diff --git a/lib/sqlalchemy/databases/mysql.py b/lib/sqlalchemy/databases/mysql.py index 429ffc0fd0..9e3f677d11 100644 --- a/lib/sqlalchemy/databases/mysql.py +++ b/lib/sqlalchemy/databases/mysql.py @@ -167,8 +167,8 @@ class MySQLTableImpl(sql.TableImpl): """ def _rowid_col(self): if getattr(self, '_mysql_rowid_column', None) is None: - if len(self.table.primary_keys) > 0: - self._mysql_rowid_column = self.table.primary_keys[0] + if len(self.table.primary_key) > 0: + self._mysql_rowid_column = self.table.primary_key[0] else: self._mysql_rowid_column = self.table.columns[self.table.columns.keys()[0]] return self._mysql_rowid_column diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index 91547d12c8..58d533b108 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -125,7 +125,7 @@ class OracleSQLEngine(ansisql.ANSISQLEngine): plist = [parameters] for param in plist: last_inserted_ids = [] - for primary_key in compiled.statement.table.primary_keys: + for primary_key in compiled.statement.table.primary_key: if not param.has_key(primary_key.key) or param[primary_key.key] is None: if primary_key.sequence is None: raise "Column '%s.%s': Oracle primary key columns require schema.Sequence to create ids" % (primary_key.table.name, primary_key.name) @@ -190,7 +190,7 @@ class OracleCompiler(ansisql.ANSICompiler): mapper will by default not put them in the insert statement to comply with autoincrement fields that require they not be present. so, put them all in for all primary key columns.""" - for c in insert.table.primary_keys: + for c in insert.table.primary_key: if not self.bindparams.has_key(c.key): self.bindparams[c.key] = None return ansisql.ANSICompiler.visit_insert(self, insert) diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index 75b9e1aee3..5a3d6388a3 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -165,8 +165,8 @@ class PGSQLEngine(ansisql.ANSISQLEngine): # else we have to use lastrowid and select the most recently inserted row table = self.context.last_inserted_table - if self.context.lastrowid is not None and table is not None and len(table.primary_keys): - row = sql.select(table.primary_keys, table.rowid_column == self.context.lastrowid).execute().fetchone() + if self.context.lastrowid is not None and table is not None and len(table.primary_key): + row = sql.select(table.primary_key, table.rowid_column == self.context.lastrowid).execute().fetchone() return [v for v in row] else: return None @@ -185,7 +185,7 @@ class PGSQLEngine(ansisql.ANSISQLEngine): for param in plist: last_inserted_ids = [] need_lastrowid=False - for primary_key in compiled.statement.table.primary_keys: + for primary_key in compiled.statement.table.primary_key: if not param.has_key(primary_key.key) or param[primary_key.key] is None: if primary_key.sequence is not None and not primary_key.sequence.optional: if echo is True or self.echo: @@ -236,7 +236,7 @@ class PGCompiler(ansisql.ANSICompiler): mapper will by default not put them in the insert statement to comply with autoincrement fields that require they not be present. so, put them all in for columns where sequence usage is defined.""" - for c in insert.table.primary_keys: + for c in insert.table.primary_key: if c.sequence is not None and not c.sequence.optional: self.bindparams[c.key] = None return ansisql.ANSICompiler.visit_insert(self, insert) diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py index 845efdf33a..0244fb21b7 100644 --- a/lib/sqlalchemy/databases/sqlite.py +++ b/lib/sqlalchemy/databases/sqlite.py @@ -203,16 +203,16 @@ class SQLiteSchemaGenerator(ansisql.ANSISchemaGenerator): separator = "\n" have_pk = False - use_pks = len(table.primary_keys) == 1 + use_pks = len(table.primary_key) == 1 for column in table.columns: self.append(separator) separator = ", \n" self.append("\t" + self.get_column_specification(column, override_pk=not use_pks)) - if len(table.primary_keys) > 1: + if len(table.primary_key) > 1: self.append(", \n") # put all PRIMARY KEYS in a UNIQUE index - self.append("\tUNIQUE (%s)" % string.join([c.name for c in table.primary_keys],', ')) + self.append("\tUNIQUE (%s)" % string.join([c.name for c in table.primary_key],', ')) self.append("\n)\n\n") self.execute() diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py index c90eb68942..d39ec1e83e 100644 --- a/lib/sqlalchemy/engine.py +++ b/lib/sqlalchemy/engine.py @@ -157,7 +157,7 @@ class SQLEngine(schema.SchemaEngine): def last_inserted_ids(self): """returns a thread-local list of the primary keys for the last insert statement executed. - This does not apply to straight textual clauses; only to sql.Insert objects compiled against a schema.Table object, which are executed via statement.execute(). The order of items in the list is the same as that of the Table's 'primary_keys' attribute.""" + This does not apply to straight textual clauses; only to sql.Insert objects compiled against a schema.Table object, which are executed via statement.execute(). The order of items in the list is the same as that of the Table's 'primary_key' attribute.""" raise NotImplementedError() def connect_args(self): diff --git a/lib/sqlalchemy/mapping/mapper.py b/lib/sqlalchemy/mapping/mapper.py index 8150f6f90d..52712eff9c 100644 --- a/lib/sqlalchemy/mapping/mapper.py +++ b/lib/sqlalchemy/mapping/mapper.py @@ -36,7 +36,7 @@ class Mapper(object): primarytable = None, scope = "thread", properties = None, - primary_keys = None, + primary_key = None, is_primary = False, inherits = None, inherit_condition = None, @@ -49,7 +49,7 @@ class Mapper(object): 'primarytable':primarytable, 'scope':scope, 'properties':properties or {}, - 'primary_keys':primary_keys, + 'primary_key':primary_key, 'is_primary':False, 'inherits':inherits, 'inherit_condition':inherit_condition, @@ -89,22 +89,22 @@ class Mapper(object): else: self.primarytable = primarytable - # determine primary keys, either passed in, or get them from our set of tables - self.primary_keys = {} - if primary_keys is not None: - for k in primary_keys: - self.primary_keys.setdefault(k.table, []).append(k) + # determine primary key columns, either passed in, or get them from our set of tables + self.pks_by_table = {} + if primary_key is not None: + for k in primary_key: + self.pks_by_table.setdefault(k.table, []).append(k) if k.table != self.table: - self.primary_keys.setdefault(self.table, []).append(k) + self.pks_by_table.setdefault(self.table, []).append(k) else: for t in self.tables + [self.table]: try: - list = self.primary_keys[t] + list = self.pks_by_table[t] except KeyError: - list = self.primary_keys.setdefault(t, util.HashSet()) - if not len(t.primary_keys): - raise "Table " + t.name + " has no primary keys. Specify primary_keys argument to mapper." - for k in t.primary_keys: + list = self.pks_by_table.setdefault(t, util.HashSet()) + if not len(t.primary_key): + raise "Table " + t.name + " has no primary key columns. Specify primary_key argument to mapper." + for k in t.primary_key: list.append(k) # make table columns addressable via the mapper @@ -241,7 +241,7 @@ class Mapper(object): def get(self, *ident): """returns an instance of the object based on the given identifier, or None if not found. The *ident argument is a - list of primary keys in the order of the table def's primary keys.""" + list of primary key columns in the order of the table def's primary key columns.""" key = objectstore.get_id_key(ident, self.class_, self.primarytable) #print "key: " + repr(key) + " ident: " + repr(ident) try: @@ -249,7 +249,7 @@ class Mapper(object): except KeyError: clause = sql.and_() i = 0 - for primary_key in self.primary_keys[self.primarytable]: + for primary_key in self.pks_by_table[self.primarytable]: # appending to the and_'s clause list directly to skip # typechecks etc. clause.clauses.append(primary_key == ident[i]) @@ -260,11 +260,11 @@ class Mapper(object): return None - def identity_key(self, *primary_keys): - return objectstore.get_id_key(tuple(primary_keys), self.class_, self.primarytable) + def identity_key(self, *primary_key): + return objectstore.get_id_key(tuple(primary_key), self.class_, self.primarytable) def instance_key(self, instance): - return self.identity_key(*[self._getattrbycolumn(instance, column) for column in self.primary_keys[self.table]]) + return self.identity_key(*[self._getattrbycolumn(instance, column) for column in self.pks_by_table[self.table]]) def compile(self, whereclause = None, **options): """works like select, except returns the SQL statement object without @@ -346,16 +346,16 @@ class Mapper(object): for table in self.tables: # loop thru tables in the outer loop, objects on the inner loop. # this is important for an object represented across two tables - # so that it gets its primary keys populated for the benefit of the + # so that it gets its primary key columns populated for the benefit of the # second table. insert = [] update = [] - # we have our own idea of the primary keys + # we have our own idea of the primary key columns # for this table, in the case that the user - # specified custom primary keys. + # specified custom primary key cols. pk = {} - for k in self.primary_keys[table]: + for k in self.pks_by_table[table]: pk[k] = k for obj in objects: @@ -384,7 +384,7 @@ class Mapper(object): if len(update): #print "REGULAR UPDATES" clause = sql.and_() - for col in self.primary_keys[table]: + for col in self.pks_by_table[table]: clause.clauses.append(col == sql.bindparam(col.table.name + "_" + col.key)) statement = table.update(clause) c = statement.execute(*update) @@ -396,13 +396,13 @@ class Mapper(object): for rec in insert: (obj, params) = rec statement.execute(**params) - primary_keys = table.engine.last_inserted_ids() - if primary_keys is not None: + primary_key = table.engine.last_inserted_ids() + if primary_key is not None: i = 0 - for col in self.primary_keys[table]: + for col in self.pks_by_table[table]: # print "col: " + table.name + "." + col.key + " val: " + repr(self._getattrbycolumn(obj, col)) if self._getattrbycolumn(obj, col) is None: - self._setattrbycolumn(obj, col, primary_keys[i]) + self._setattrbycolumn(obj, col, primary_key[i]) i+=1 self.extension.after_insert(self, obj) @@ -417,13 +417,13 @@ class Mapper(object): continue else: delete.append(params) - for col in self.primary_keys[table]: + for col in self.pks_by_table[table]: params[col.key] = self._getattrbycolumn(obj, col) uow.register_deleted_object(obj) self.extension.before_delete(self, obj) if len(delete): clause = sql.and_() - for col in self.primary_keys[table]: + for col in self.pks_by_table[table]: clause.clauses.append(col == sql.bindparam(col.key)) statement = table.delete(clause) c = statement.execute(*delete) @@ -452,7 +452,7 @@ class Mapper(object): def _identity_key(self, row): - return objectstore.get_row_key(row, self.class_, self.primarytable, self.primary_keys[self.table]) + return objectstore.get_row_key(row, self.class_, self.primarytable, self.pks_by_table[self.table]) def _instance(self, row, imap, result = None, populate_existing = False): """pulls an object instance from the given row and appends it to the given result @@ -484,9 +484,9 @@ class Mapper(object): # look in result-local identitymap for it. exists = imap.has_key(identitykey) if not exists: - # check if primary keys in the result are None - this indicates + # check if primary key cols in the result are None - this indicates # an instance of the object is not present in the row - for col in self.primary_keys[self.table]: + for col in self.pks_by_table[self.table]: if row[col] is None: return None # plugin point diff --git a/lib/sqlalchemy/mapping/objectstore.py b/lib/sqlalchemy/mapping/objectstore.py index f66198f2d3..0efd54aea5 100644 --- a/lib/sqlalchemy/mapping/objectstore.py +++ b/lib/sqlalchemy/mapping/objectstore.py @@ -46,7 +46,7 @@ def get_id_key(ident, class_, table): this Selectable may be synonymous with the table argument or can be a larger construct containing that table. return value: a tuple object which is used as an identity key. """ return (class_, repr(table), tuple(ident)) -def get_row_key(row, class_, table, primary_keys): +def get_row_key(row, class_, table, primary_key): """returns an identity-map key for use in storing/retrieving an item from the identity map, given a result set row. @@ -61,7 +61,7 @@ def get_row_key(row, class_, table, primary_keys): this Selectable may be synonymous with the table argument or can be a larger construct containing that table. return value: a tuple object which is used as an identity key. """ - return (class_, repr(table), tuple([row[column] for column in primary_keys])) + return (class_, repr(table), tuple([row[column] for column in primary_key])) def begin(): """begins a new UnitOfWork transaction. the next commit will affect only diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 7206cf3c20..d5dd69dda3 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -95,7 +95,7 @@ class Table(SchemaItem): self.columns = OrderedProperties() self.c = self.columns self.foreign_keys = [] - self.primary_keys = [] + self.primary_key = [] self.engine = engine self._impl = self.engine.tableimpl(self) self._init_items(*args) @@ -111,7 +111,7 @@ class Table(SchemaItem): self.columns = OrderedProperties() self.c = self.columns self.foreign_keys = [] - self.primary_keys = [] + self.primary_key = [] self._impl = self.engine.tableimpl(self) self._init_items(*args) @@ -170,13 +170,13 @@ class Column(SchemaItem): return self.primary_key = True self.nullable = False - self.table.primary_keys.append(self) + self.table.primary_key.append(self) def _set_parent(self, table): if not self.hidden: table.columns[self.key] = self if self.primary_key: - table.primary_keys.append(self) + table.primary_key.append(self) self.table = table if self.table.engine is not None: self.type = self.table.engine.type_descriptor(self.type) diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 6a17b44552..a030bf4396 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -634,7 +634,7 @@ class Join(Selectable): self.isouter = isouter self.rowid_column = self.left.rowid_column - primary_keys = property (lambda self: [c for c in self.left.columns if c.primary_key] + [c for c in self.right.columns if c.primary_key]) + primary_key = property (lambda self: [c for c in self.left.columns if c.primary_key] + [c for c in self.right.columns if c.primary_key]) def group_parenthesized(self): """indicates if this Selectable requires parenthesis when grouped into a compound @@ -693,7 +693,7 @@ class Alias(Selectable): for co in selectable.columns: co._make_proxy(self) - primary_keys = property (lambda self: [c for c in self.columns if c.primary_key]) + primary_key = property (lambda self: [c for c in self.columns if c.primary_key]) def hash_key(self): return "Alias(%s, %s)" % (repr(self.selectable.hash_key()), repr(self.name))