Skip to content

Commit

Permalink
Merge pull request #195 from lsst/tickets/DM-21454
Browse files Browse the repository at this point in the history
DM-21454: Include all column names in foreign key names.
  • Loading branch information
TallJimbo committed Oct 4, 2019
2 parents 3eabce6 + e07cb83 commit 561929e
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 5 deletions.
2 changes: 1 addition & 1 deletion config/dimensions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ dimensions:
-
name: name
type: string
length: 8
length: 16
view_of: physical_filter
cached: true

Expand Down
7 changes: 4 additions & 3 deletions python/lsst/daf/butler/core/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ def fromConfig(cls, config: Config, **kwds) -> FieldSpec:
if self.length is not None and self.nbytes is not None:
raise SchemaValidationError(f"Both length and nbytes provided for field '{self.name}'.")
self.primaryKey = config.get("primaryKey", self.primaryKey)
self.autoincrement = config.get("autoinc", self.autoincrement)
self.autoincrement = config.get("autoincrement", self.autoincrement)
self.nullable = config.get("nullable", False if self.primaryKey else self.nullable)
self.doc = stripIfNotNone(config.get("doc", None))
return self
Expand Down Expand Up @@ -305,9 +305,10 @@ def toSqlAlchemy(self, tableName: str, schema: Schema) -> ForeignKeyConstraint:
constraint : `sqlalchemy.ForeignKeyConstraint`
SQLAlchemy version of the foreign key constraint.
"""
name = "_".join(["fkey", tableName, self.table] + list(self.target) + list(self.source))
return ForeignKeyConstraint(self.source,
[f"{self.table}.{col}" for col in self.target],
name=f"{tableName}_{self.table}_fkey",
name=name,
ondelete=self.onDelete)


Expand Down Expand Up @@ -410,7 +411,7 @@ def toSqlAlchemy(self, tableName: str, schema: Schema) -> Union[Table, View]:
table = Table(tableName, schema.metadata, comment=self.doc, info=self)
schema.tables[tableName] = table
for fieldSpec in self.fields:
table.append_column(fieldSpec.toSqlAlchemy(tableName, schema.metadata))
table.append_column(fieldSpec.toSqlAlchemy(tableName, schema))
for columns in self.unique:
table.append_constraint(UniqueConstraint(*columns))
return table
Expand Down
9 changes: 8 additions & 1 deletion python/lsst/daf/butler/registries/oracleRegistry.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,11 @@ def __init__(self, registryConfig, schemaConfig, dimensionConfig, create=False,
butlerRoot=butlerRoot)

def _createEngine(self):
return create_engine(self.config.connectionString, pool_size=1)
engine = create_engine(self.config.connectionString, pool_size=1)
conn = engine.connect()
# Work around SQLAlchemy assuming that the Oracle limit on identifier
# names is even short than it is after 12.2.
oracle_ver = engine.dialect._get_server_version_info(conn)
engine.dialect.max_identifier_length = 128 if oracle_ver >= (12, 2) else 30
conn.close()
return engine

0 comments on commit 561929e

Please sign in to comment.