When using Slick's code generator, how do I filter out columns?

Viewed 416

I'm using the Slick codegen tool and filtering out tables and renaming tables and columns successfully. However, how can I skip generating code for unwanted columns?

For example, how would I exclude the unwanted column in the items table when using SourceCodeGenerator?

2 Answers

In Slick 3.3.0, I had to override the enabled flag for columns and stop generating code for indices and foreign keys to get this to work:

val optDesiredColumns = Map(
    "table_1" -> Set("col_1", "col_2"),
    "table_2" -> Set("col_2", "col_3")
) 

val codegenFuture =  modelFuture.map { m =>
    val model = m
    new SourceCodeGenerator(model = model) {
    override def Table = tableModel => {
        val optDesiredColumns = tableNameToDesiredColumns.get(tableModel.name.table)
        new TableDef(tableModel) {
            override def Column = columnModel => {
                new ColumnDef(columnModel) {
                    override def enabled: Boolean = {
                        val rv = optDesiredColumns.map(desiredColumns =>
                            desiredColumns.contains(columnModel.name)).
                                getOrElse(super.enabled)
                        println(s"***** ${tableModel.name.table}.${columnModel.name} enabled = $rv")
                        rv
                    }
                }
            }

            override def Index = indexModel => {
                new IndexDef(indexModel)  {
                    override def enabled: Boolean = false
                }
            }

            override def ForeignKey = fkModel => {
                new ForeignKeyDef(fkModel)  {
                    override def enabled: Boolean = false
                }
            }
        }
    }
}
Related