Packages

  • package root
    Definition Classes
    root
  • package io
    Definition Classes
    root
  • package getquill
    Definition Classes
    io
  • package codegen
    Definition Classes
    getquill
  • package jdbc
    Definition Classes
    codegen
  • class ComposeableTraitsJdbcCodegen extends JdbcGeneratorBase

    This generator generates a query schema trait which can be composed with a custom context that you create in your client code (called MySchemaExtensions below because it extends and existing quill context with your query schemas).

    This generator generates a query schema trait which can be composed with a custom context that you create in your client code (called MySchemaExtensions below because it extends and existing quill context with your query schemas). Here is what that looks like:

    case class Person(firstName:String, lastName:String, age:Int)
    case class Address(...)
    
    trait PublicExtensions[+Idiom <: io.getquill.idiom.Idiom, Naming <:
    io.getquill.NamingStrategy] { this:io.getquill.context.Context[Idiom, Naming]
    =>
    
    object PersonDao { def query = querySchema[Person](...)  object AddressDao {
    def query = querySchema[Address](...) } }
    
    // Then when declaring your context: import io.getquill._ object
    MyCustomContext extends SqlMirrorContext[H2Dialect, Literal](H2Dialect,
    Literal) with PublicExtensions[H2Dialect, Literal]
    
    }
    

    A Note on Stereotyping

    Stereotyping using the ComposeableTraitsGen is done in the following manner. Firstly, extend a ComposeableTraitsGen and add the Namespacer of your choice. Let's take the alpha and bravo namespaces and combine them into a common namespace. Also be sure to set the memberNamer correctly so that the different querySchemas generated won't all be called '.query' in the Common object.

     class MyStereotypingGen(...) extends ComposeableTraitsGen(...) {
    override def namespacer: Namespacer = ts=> if(ts.tableSchema == "alpha" ||
    ts.tableSchema == "bravo") "common" else ts.tableSchema
    
    override def memberNamer: MemberNamer = ts => ts.tableName.snakeToLowerCamel
    } 
    

    The following schema should result:

     trait CommonExtensions[+Idiom <:
    io.getquill.idiom.Idiom, Naming <: io.getquill.NamingStrategy] {
    this:io.getquill.context.Context[Idiom, Naming] =>
    
    object PersonDao { // you don't want each of these to be called 'query' so
    choose an appropriate memberNamer def alphaPerson = querySchema[Person](...)
    def bravoPerson = querySchema[Person](...) } }
    
    trait PublicExtensions[+Idiom <: io.getquill.idiom.Idiom, Naming <:
    io.getquill.NamingStrategy] { this:io.getquill.context.Context[Idiom, Naming]
    \=>
    
    object AddressDao { def publicAddress = querySchema[Address](...) } } 
    

    When DAO Objects Collide

    Now when you are trying to generate schemas which are not being stereotyped but have equivalent table names for example:

     trait AlphaExtensions[+Idiom <: io.getquill.idiom.Idiom, Naming <:
    io.getquill.NamingStrategy] { this:io.getquill.context.Context[Idiom, Naming]
    \=>
    
    object PersonDao { def query = querySchema[Person](...) } }
    
    trait BravoExtensions[+Idiom <: io.getquill.idiom.Idiom, Naming <:
    io.getquill.NamingStrategy] { this:io.getquill.context.Context[Idiom, Naming]
    \=>
    
    object PersonDao { def query = querySchema[Person](...) } }
    
    // Invalid because MyCustomContext has a PersonDao from AlphaExtensions and
    and a PersonDao from BravoExtensions which collide. object MyCustomContext
    extends SqlMirrorContext[H2Dialect, Literal](H2Dialect, Literal) with
    AlphaExtensions[H2Dialect, Literal] with BravoExtensions[H2Dialect, Literal]
    

    You will not be able to append these two traits to the same quill context because the PersonDao inside alpha and bravo will collide inside of MyCustomContext. Use the parameter nestedTrait=true in order to get around this.

     trait AlphaExtensions[+Idiom <: io.getquill.idiom.Idiom, Naming <:
    io.getquill.NamingStrategy] { this:io.getquill.context.Context[Idiom, Naming]
    \=>
    
    trait AlphaSchema { object PersonDao { def query = querySchema[Person](...) }
    } }
    
    trait BravoExtensions[+Idiom <: io.getquill.idiom.Idiom, Naming <:
    io.getquill.NamingStrategy] { this:io.getquill.context.Context[Idiom, Naming]
    \=>
    
    trait BravoSchema { object PersonDao { def query = querySchema[Person](...) }
    } }
    
    // Since PersonDao is inside MyCustomContext.alpha and MyCustomContext.bravo
    as opposed to MyCustomContext // there will be no collision. object
    MyCustomContext extends SqlMirrorContext[H2Dialect, Literal](H2Dialect,
    Literal) with AlphaExtensions[H2Dialect, Literal] with
    BravoExtensions[H2Dialect, Literal] 
    

    Definition Classes
    jdbc
  • CodeEmitter
  • ContextifiedUnitGenerator
  • JdbcStereotypingHelper
  • MultiGeneratorFactory

class ContextifiedUnitGenerator extends CodeEmitter

Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ContextifiedUnitGenerator
  2. CodeEmitter
  3. PackageGen
  4. AbstractCodeEmitter
  5. AnyRef
  6. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ContextifiedUnitGenerator(emitterSettings: EmitterSettings[JdbcTableMeta, JdbcColumnMeta])

Type Members

  1. abstract class AbstractCaseClassGen extends AnyRef
    Definition Classes
    AbstractCodeEmitter
  2. abstract class AbstractCombinedTableSchemasGen extends AnyRef
    Definition Classes
    AbstractCodeEmitter
  3. class CaseClassGen extends gen.Generator.CodeEmitter.AbstractCaseClassGen with CaseClassNaming[(Generator.this)#TableMeta, (Generator.this)#ColumnMeta]
    Definition Classes
    CodeEmitter
  4. class CombinedTableSchemasGen extends gen.Generator.CodeEmitter.AbstractCombinedTableSchemasGen with ObjectGen
    Definition Classes
    CodeEmitter

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def CaseClass: (TableStereotype[ComposeableTraitsJdbcCodegen.TableMeta, ComposeableTraitsJdbcCodegen.ColumnMeta]) ⇒ CaseClassGen
    Definition Classes
    CodeEmitter
  5. def CombinedTableSchemas: (TableStereotype[ComposeableTraitsJdbcCodegen.TableMeta, ComposeableTraitsJdbcCodegen.ColumnMeta], ComposeableTraitsJdbcCodegen.QuerySchemaNaming) ⇒ CombinedTableSchemasGen
    Definition Classes
    ContextifiedUnitGenerator → CodeEmitter
  6. def apply: String
    Definition Classes
    AbstractCodeEmitter
  7. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  8. def body: String
    Definition Classes
    CodeEmitter
  9. val caseClassTables: Seq[TableStereotype[ComposeableTraitsJdbcCodegen.TableMeta, ComposeableTraitsJdbcCodegen.ColumnMeta]]
    Definition Classes
    CodeEmitter
  10. def caseClassesCode: String
    Definition Classes
    CodeEmitter
  11. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  12. def code: String
    Definition Classes
    CodeEmitter → AbstractCodeEmitter
  13. def codeWrapper: CodeWrapper
    Definition Classes
    CodeEmitter → PackageGen
  14. def defaultNamespace: String
    Definition Classes
    CodeEmitter
  15. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  16. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  17. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  18. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  19. def ifMembers(str: String): String
    Attributes
    protected
    Definition Classes
    CodeEmitter
  20. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  21. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  22. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  23. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  24. def packageName: Option[String]
    Definition Classes
    PackageGen
  25. def packagePrefix: String
    Definition Classes
    CodeEmitter → PackageGen
  26. def possibleTraitNesting(innerCode: String): String
  27. val querySchemaTables: Seq[TableStereotype[ComposeableTraitsJdbcCodegen.TableMeta, ComposeableTraitsJdbcCodegen.ColumnMeta]]
    Definition Classes
    CodeEmitter
  28. def surroundByPackage(innerCode: String): String
    Definition Classes
    PackageGen
  29. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  30. def tableSchemasCode: String
    Definition Classes
    ContextifiedUnitGenerator → CodeEmitter
  31. def toString(): String
    Definition Classes
    AnyRef → Any
  32. def traitName: String
  33. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  34. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  35. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] ) @Deprecated
    Deprecated

Inherited from PackageGen

Inherited from AbstractCodeEmitter

Inherited from AnyRef

Inherited from Any

Ungrouped