/** * 名前を処理します。 * * @param entityMeta エンティティメタデータ * @param tableDesc テーブル記述 * @param table テーブル */ protected void doName(EntityMeta entityMeta, TableDesc tableDesc, Table table) { TableMeta tableMeta = entityMeta.getTableMeta(); tableDesc.setCatalogName(tableMeta.getCatalog()); tableDesc.setSchemaName(tableMeta.getSchema()); tableDesc.setName(tableMeta.getName()); tableDesc.setCanonicalName(buildCanonicalName(tableMeta)); }
/** * カラム記述の{@link Comparator}を作成します。 * * @param tableDesc テーブル記述 * @return カラム記述の{@link Comparator} */ protected Comparator<ColumnDescRef> createColumnDescRefComparator(TableDesc tableDesc) { final List<String> pkColumnNameList = new ArrayList<String>(); if (tableDesc.getPrimaryKeyDesc() != null) { PrimaryKeyDesc primaryKeyDesc = tableDesc.getPrimaryKeyDesc(); pkColumnNameList.addAll(primaryKeyDesc.getColumnNameList()); } return new Comparator<ColumnDescRef>() { public int compare(ColumnDescRef o1, ColumnDescRef o2) { int index1 = pkColumnNameList.indexOf(o1.columnDesc.getName()); int index2 = pkColumnNameList.indexOf(o2.columnDesc.getName()); int ret = 0; if (index1 < 0) { if (index2 < 0) { ret = o1.index - o2.index; } else { ret = 1; } } else { if (index2 < 0) { ret = -1; } else { ret = index1 - index2; } } return ret; } }; }
/** * シーケンス記述を処理します。 * * @param entityMeta エンティティメタデータ * @param tableDesc テーブル記述 * @param table テーブル */ protected void doSequenceDesc(EntityMeta entityMeta, TableDesc tableDesc, Table table) { for (PropertyMeta propertyMeta : entityMeta.getIdPropertyMetaList()) { SequenceDesc sequenceDesc = sequenceDescFactory.getSequenceDesc(entityMeta, propertyMeta); if (sequenceDesc != null) { tableDesc.addSequenceDesc(sequenceDesc); } } }
/** * 一意キー記述を処理します。 * * @param entityMeta エンティティメタデータ * @param tableDesc テーブル記述 * @param generator テーブルジェネレータ */ protected void doUniqueConstraints( EntityMeta entityMeta, TableDesc tableDesc, TableGenerator generator) { for (UniqueConstraint uc : generator.uniqueConstraints()) { UniqueKeyDesc uniqueKeyDesc = uniqueKeyDescFactory.getCompositeUniqueKeyDesc(uc); if (uniqueKeyDesc != null) { tableDesc.addUniqueKeyDesc(uniqueKeyDesc); } } }
/** * 主キー記述を処理します。 * * @param entityMeta エンティティメタデータ * @param propertyMeta プロパティメタデータ * @param tableDesc テーブル記述 * @param generator テーブルジェネレータ */ protected void doPrimaryKeyColumn( EntityMeta entityMeta, TableDesc tableDesc, TableGenerator generator) { String pkColumnName = generator.pkColumnName(); if (StringUtil.isEmpty(pkColumnName)) { pkColumnName = TableIdGenerator.DEFAULT_PK_COLUMN_NAME; } PrimaryKeyDesc primaryKeyDesc = new PrimaryKeyDesc(); primaryKeyDesc.addColumnName(pkColumnName); tableDesc.setPrimaryKeyDesc(primaryKeyDesc); ColumnDesc columnDesc = new ColumnDesc(); columnDesc.setName(pkColumnName); SqlType sqlType = dialect.getSqlType(Types.VARCHAR); columnDesc.setSqlType(sqlType); Column column = AnnotationUtil.getDefaultColumn(); columnDesc.setDefinition(sqlType.getDataType(column.length(), 0, 0, false)); tableDesc.addColumnDesc(columnDesc); }
/** * 名前を処理します。 * * @param entityMeta エンティティメタデータ * @param tableDesc テーブル記述 * @param generator テーブルジェネレータ */ protected void doName(EntityMeta entityMeta, TableDesc tableDesc, TableGenerator generator) { String catalog = generator.catalog(); if (StringUtil.isEmpty(catalog)) { catalog = entityMeta.getTableMeta().getCatalog(); } String schema = generator.schema(); if (StringUtil.isEmpty(schema)) { schema = entityMeta.getTableMeta().getSchema(); } String name = generator.table(); if (StringUtil.isEmpty(name)) { name = TableIdGenerator.DEFAULT_TABLE; } tableDesc.setCatalogName(catalog); tableDesc.setSchemaName(schema); tableDesc.setName(name); tableDesc.setCanonicalName(buildCanonicalName(catalog, schema, name)); }
/** * 外部キー記述を処理します。 * * @param entityMeta エンティティメタデータ * @param tableDesc テーブル記述 * @param table テーブル */ protected void doForeignKeyDesc(EntityMeta entityMeta, TableDesc tableDesc, Table table) { for (int i = 0; i < entityMeta.getPropertyMetaSize(); i++) { PropertyMeta propertyMeta = entityMeta.getPropertyMeta(i); ForeignKeyDesc foreignKeyDesc = foreignKeyDescFactory.getForeignKeyDesc(entityMeta, propertyMeta); if (foreignKeyDesc != null) { tableDesc.addForeignKeyDesc(foreignKeyDesc); } } }
/** * 一意キー記述を処理します。 * * @param entityMeta エンティティメタデータ * @param tableDesc テーブル記述 * @param table テーブル */ protected void doUniqueKeyDesc(EntityMeta entityMeta, TableDesc tableDesc, Table table) { String singlePkColumnName = null; PrimaryKeyDesc primaryKeyDesc = tableDesc.getPrimaryKeyDesc(); if (primaryKeyDesc != null && primaryKeyDesc.getColumnNameList().size() == 1) { singlePkColumnName = primaryKeyDesc.getColumnNameList().get(0); } for (ColumnDesc columnDesc : tableDesc.getColumnDescList()) { if (columnDesc.getName().equals(singlePkColumnName)) { continue; } UniqueKeyDesc uniqueKeyDesc = uniqueKeyDescFactory.getSingleUniqueKeyDesc(columnDesc); if (uniqueKeyDesc != null) { tableDesc.addUniqueKeyDesc(uniqueKeyDesc); } } for (UniqueConstraint uc : table.uniqueConstraints()) { UniqueKeyDesc uniqueKeyDesc = uniqueKeyDescFactory.getCompositeUniqueKeyDesc(uc); if (uniqueKeyDesc != null) { tableDesc.addUniqueKeyDesc(uniqueKeyDesc); } } }
/** * カラム記述を処理します。 * * @param entityMeta エンティティメタデータ * @param tableDesc テーブル記述 * @param table テーブル */ protected void doColumnDesc(EntityMeta entityMeta, final TableDesc tableDesc, Table table) { List<ColumnDescRef> columnDescRefList = new ArrayList<ColumnDescRef>(); for (int i = 0; i < entityMeta.getColumnPropertyMetaSize(); i++) { PropertyMeta propertyMeta = entityMeta.getColumnPropertyMeta(i); ColumnDesc columnDesc = columnDescFactory.getColumnDesc(entityMeta, propertyMeta); if (columnDesc != null) { columnDescRefList.add(new ColumnDescRef(i, columnDesc)); } } Collections.sort(columnDescRefList, createColumnDescRefComparator(tableDesc)); for (ColumnDescRef columnDescRef : columnDescRefList) { tableDesc.addColumnDesc(columnDescRef.columnDesc); } }
/** * カラム記述を処理します。 * * @param entityMeta エンティティメタデータ * @param propertyMetaList プロパティメタデータのリスト * @param tableDesc テーブル記述 * @param generator テーブルジェネレータ */ protected void doValueColumn( EntityMeta entityMeta, TableDesc tableDesc, TableGenerator generator) { String valueColumnName = generator.valueColumnName(); if (StringUtil.isEmpty(valueColumnName)) { valueColumnName = TableIdGenerator.DEFAULT_VALUE_COLUMN_NAME; } ColumnDesc columnDesc = new ColumnDesc(); columnDesc.setName(valueColumnName); SqlType sqlType = dialect.getSqlType(Types.BIGINT); columnDesc.setSqlType(sqlType); Column column = AnnotationUtil.getDefaultColumn(); columnDesc.setDefinition(sqlType.getDataType(0, column.precision(), 0, false)); columnDesc.setNullable(false); tableDesc.addColumnDesc(columnDesc); }
/** * 識別子生成用のテーブル記述を処理します。 * * @param entityMeta エンティティメタデータ * @param tableDesc テーブル記述 * @param table テーブル */ protected void doIdTableDesc(EntityMeta entityMeta, TableDesc tableDesc, Table table) { for (PropertyMeta propertyMeta : entityMeta.getIdPropertyMetaList()) { TableDesc idTableDesc = idTableDescFactory.getTableDesc(entityMeta, propertyMeta); if (idTableDesc == null) { continue; } tableDesc.addIdTableDesc(idTableDesc); String fullName = idTableDesc.getFullName().toLowerCase(); TableDesc cache = tableDescMap.get(fullName); if (cache == null) { tableDescMap.put(fullName, idTableDesc); } else { cache.setCatalogName(idTableDesc.getCatalogName()); cache.setSchemaName(idTableDesc.getSchemaName()); cache.setName(idTableDesc.getName()); cache.setPrimaryKeyDesc(idTableDesc.getPrimaryKeyDesc()); for (ColumnDesc columnDesc : idTableDesc.getColumnDescList()) { cache.addColumnDesc(columnDesc); } for (UniqueKeyDesc uniqueKeyDesc : idTableDesc.getUniqueKeyDescList()) { cache.addUniqueKeyDesc(uniqueKeyDesc); } } } }
/** * 主キー記述を処理します。 * * @param entityMeta エンティティメタデータ * @param tableDesc テーブル記述 * @param table テーブル */ protected void doPrimaryKeyDesc(EntityMeta entityMeta, TableDesc tableDesc, Table table) { PrimaryKeyDesc primaryKeyDesc = primaryKeyDescFactory.getPrimaryKeyDesc(entityMeta); if (primaryKeyDesc != null) { tableDesc.setPrimaryKeyDesc(primaryKeyDesc); } }
/** * コメントを処理します。 * * @param entityMeta エンティティメタデータ * @param tableDesc テーブル記述 * @param table テーブル */ protected void doComment(EntityMeta entityMeta, TableDesc tableDesc, Table table) { String comment = EntityMetaUtil.getComment(entityMeta); tableDesc.setComment(comment); }