Check for existence of entities before generating them#1255
Check for existence of entities before generating them#1255parsonsmatt merged 7 commits intopersistent-2.13from
Conversation
| @@ -321,71 +321,86 @@ fixForeignKeysAll unEnts = map fixForeignKeys unEnts | |||
| -- the names of the referenced columns | |||
| fixForeignKey :: EntityDef -> UnboundForeignDef -> ForeignDef | |||
| fixForeignKey ent (UnboundForeignDef foreignFieldTexts parentFieldTexts fdef) = | |||
There was a problem hiding this comment.
this whole function should get trashed
we can't pass in the pre-existing entities here meaningfully so we shouldn't even be trying to get this right
| ConstraintNameDB | ||
| . T.replace oldDbName dbname . unConstraintNameDB | ||
| $ foreignConstraintNameDBName fdef | ||
| } |
There was a problem hiding this comment.
this is all stylistic, no functionality changes
| if all ((nullSetting ==) . isNull) fds | ||
| then nullSetting | ||
| else error $ | ||
| "foreign key columns must all be nullable or non-nullable" |
There was a problem hiding this comment.
all style, no function changes
| Just err -> | ||
| error err | ||
| Nothing -> | ||
| (fieldDef, ((haskellField, fieldDB fieldDef), (parentFieldHaskellName, parentFieldNameDB))) |
There was a problem hiding this comment.
more style changes. lawd help those names were awful.
| , foreignFieldCascade = FieldCascade | ||
| { fcOnDelete = onDelete | ||
| , fcOnUpdate = onUpdate | ||
| go (constraintName:rest) onDelete onUpdate |
| filterM shouldGenerateCode | ||
| $ embedEntityDefs | ||
| $ map (setDefaultIdFields mps) | ||
| $ ents' |
There was a problem hiding this comment.
this is the Meat of the change
inlined the changes and did filterM to skip things already defined.
| -- we can't just use 'isInstance' because TH throws an error | ||
| shouldGenerateCode :: EntityDef -> Q Bool | ||
| shouldGenerateCode ed = do | ||
| mtyp <- lookupTypeName entityName |
There was a problem hiding this comment.
we have to use lookupTypeName instead of isInstance because lookupTypeName returns Nothing if the type name is not in scope, while isInstance merely dies with an unrecoverable compile error.
| profile MBDogId | ||
|
|
||
| -- TODO: make the QQ not care about this table being missing | ||
| -- Foreign MBCompositePrimary bar_to_comp name age |
* Internalize SqlBackend (#1225) * abstractification * abstractification * Internalize SqlBackend * suppor tother sql dbs * bounds * asdf * import data.monoid * limitoffset and backendspecificoverrides * use setter * getConnUpsertSql * formatting * sigh * clean warns * cabal formatting * merge resolve * lol * ok * update changelogs * one more [ci skip] * Implicit ID Column Configuration (#1234) * Implicit ID Column COnfiguration * PersistSettings is internal * start teasing out the module structure * move around, factor out the Names module * start enumerating types, make entitydef abstract * entity def abstraction * teasing out the EntityDef stuff * builds * testinggg * it works * it works * tidy up * sigh * i hate you * tidy * wrote test for mysql, need to set maxlen sigh * mysql test, need to be able to set maxlen * support mysql lmfao * whyyy * Deprecate mpsGeneric (#1250) * discoverEntities (#1253) * discover entities * remove fdescribe * changelog * yupo * remove error * Fix migrations (#1252) * Better migrations * why is the test failing * Columns are present in entityFields now, but the generated code is broken. * th specs work * fixed mkColumns * changelog entry * fix mongo * no idea why this is broken now * why on earth did this work * remove debug trace statements * typo * what no put that back in * Check for existence of entities before generating them (#1255) * wtf * hmmm * refactor and tidy * are foreign fields never right ?! * changelog * fix comments * dead code * Implement config for customising the FK name (#1244) * Implement config for customising the FK name * Update changelog * Tweak test description * Tweaks/better use of types * Review tweaks * Some initial post-review changes * Table name turned out to be EntityNameHS * Do the same thing but for the constraint * Expose more stuff * Some refactoring / cleanup * Fix changelog indentation * Tidy code layout * QuasiQuoter Improvements (#1256) * QQ now returns UnboundEntityDef * Relocate fixForeignKeysAll * deprecate some stuff, reorganize some code * ok, now we need to set sql types appropriately. * dodgy instances are banned * fuse away the EntityDefSqlTypeExp stuff * refactor to top level * fuse sqlTypeExp in there * fix Key vs Id stuff * still need to get the foreign key types right * hmmm * move to QuasiSpec * clean up tests * so close * ok but what if i don't fix foreign keys * wip * oh man please * getting closer... * make some tests * fix json and keyFromValueM * slightly more graceful handling * return dummy field for id, from persist values * got some tests passing * well sqlite works * pg tests running * what happened * hmm mongo is trashed maybe * bye mongo * ok for real bye mongo, for now at least * clean warns * asdf * drop GHC 8.2 support * sigh * lots of commments * Merge branch 'master' into persistent-2.13 (#1261) * Reexport PersistValue * fix json for MigrationOnly * Export onlyOneUniqueDef (fixes #1194) * use onlyOneUniqueDef in persistent-postgresql Co-authored-by: Dan Brooks <[email protected]>
Before submitting your PR, check that you've:
@sincedeclarations to the Haddockstylish-haskellon any changed files..editorconfigfile for details)After submitting your PR:
(unreleased)on the Changelog