({ ...x, ordinal: index + 1 }))} title={`Columns (${columns?.length || 0})`} emptyMessage="No columns defined" clickable={writable()} on:clickrow={e => showModal(ColumnEditorModal, { columnInfo: e.detail, tableInfo, setTableInfo, driver })} onAddNew={writable() ? addColumn : null} columns={[ { fieldName: 'notNull', header: 'Nullability', sortable: true, slot: 0, }, { fieldName: 'dataType', header: 'Data Type', sortable: true, }, { fieldName: 'defaultValue', header: 'Default value', sortable: true, }, driver?.dialect?.columnProperties?.isSparse && { fieldName: 'isSparse', header: 'Is Sparse', sortable: true, slot: 1, }, { fieldName: 'computedExpression', header: 'Computed Expression', sortable: true, }, driver?.dialect?.columnProperties?.isPersisted && { fieldName: 'isPersisted', header: 'Is Persisted', sortable: true, slot: 2, }, driver?.dialect?.columnProperties?.isUnsigned && { fieldName: 'isUnsigned', header: 'Unsigned', sortable: true, slot: 4, }, driver?.dialect?.columnProperties?.isZerofill && { fieldName: 'isZerofill', header: 'Zero fill', sortable: true, slot: 5, }, driver?.dialect?.columnProperties?.columnComment && { fieldName: 'columnComment', header: 'Comment', sortable: true, }, writable() ? { fieldName: 'actions', sortable: true, slot: 3, } : null, ]} > {row?.notNull ? 'NOT NULL' : 'NULL'} {row?.isSparse ? 'YES' : 'NO'} {row?.isPersisted ? 'YES' : 'NO'} { e.stopPropagation(); setTableInfo(tbl => editorDeleteColumn(tbl, row)); }}>Remove {row?.isUnsigned ? 'YES' : 'NO'} {row?.isZerofill ? 'YES' : 'NO'} 0 ? addPrimaryKey : null} clickable={writable()} on:clickrow={e => showModal(PrimaryKeyEditorModal, { constraintInfo: e.detail, tableInfo, setTableInfo })} columns={[ { fieldName: 'columns', header: 'Columns', slot: 0, }, writable() ? { fieldName: 'actions', sortable: true, slot: 1, } : null, ]} > {row?.columns.map(x => x.columnName).join(', ')} { e.stopPropagation(); setTableInfo(tbl => editorDeleteConstraint(tbl, row)); }}>Remove 0 ? addIndex : null} title={`Indexes (${indexes?.length || 0})`} emptyMessage={writable() ? 'No index defined' : null} clickable={writable()} on:clickrow={e => showModal(IndexEditorModal, { constraintInfo: e.detail, tableInfo, setTableInfo })} columns={[ { fieldName: 'columns', header: 'Columns', slot: 0, }, { fieldName: 'unique', header: 'Unique', slot: 1, }, writable() ? { fieldName: 'actions', sortable: true, slot: 2, } : null, ]} > {row?.columns.map(x => x.columnName).join(', ')} {row?.isUnique ? 'YES' : 'NO'} { e.stopPropagation(); setTableInfo(tbl => editorDeleteConstraint(tbl, row)); }}>Remove 0 ? addUnique : null} title={`Unique constraints (${uniques?.length || 0})`} emptyMessage={writable() ? 'No unique defined' : null} clickable={writable()} on:clickrow={e => showModal(UniqueEditorModal, { constraintInfo: e.detail, tableInfo, setTableInfo })} columns={[ { fieldName: 'columns', header: 'Columns', slot: 0, }, writable() ? { fieldName: 'actions', sortable: true, slot: 1, } : null, ]} > {row?.columns.map(x => x.columnName).join(', ')} { e.stopPropagation(); setTableInfo(tbl => editorDeleteConstraint(tbl, row)); }}>Remove 0 ? addForeignKey : null} title={`Foreign keys (${foreignKeys?.length || 0})`} emptyMessage={writable() ? 'No foreign key defined' : null} clickable={writable()} onRemove={row => setTableInfo(tbl => editorDeleteConstraint(tbl, row))} on:clickrow={e => showModal(ForeignKeyEditorModal, { constraintInfo: e.detail, tableInfo, setTableInfo, dbInfo })} />