private void amendAllColumns() { // make sure all PF/FK are included, thus become exposed to calcite later Set<TableRef> tables = collectTablesOnJoinChain(allColumns); for (TableRef t : tables) { JoinDesc join = model.getJoinByPKSide(t); if (join != null) { allColumns.addAll(Arrays.asList(join.getForeignKeyColumns())); allColumns.addAll(Arrays.asList(join.getPrimaryKeyColumns())); } } for (TblColRef col : allColumns) { allColumnDescs.add(col.getColumnDesc()); } }
private boolean validatePkFkDim(JoinDesc join, Set<TblColRef> mcols) { if (join == null) return false; boolean pkfkDimAmended = false; for (TblColRef c : join.getForeignKeyColumns()) { if (!mcols.contains(c)) { pkfkDimAmended = validatePkFkDim(c) || pkfkDimAmended; } } for (TblColRef c : join.getPrimaryKeyColumns()) { if (!mcols.contains(c)) { pkfkDimAmended = validatePkFkDim(c) || pkfkDimAmended; } } return pkfkDimAmended; }
@Override public boolean matches(JoinDesc join1, JoinDesc join2) { if (join1 == null) { return join2 == null; } else if (join2 == null) { return false; } else { if (!join1.getType().equalsIgnoreCase(join2.getType())) return false; // note pk/fk are sorted, sortByFK() if (!this.columnDescEquals(join1.getForeignKeyColumns(), join2.getForeignKeyColumns())) return false; if (!this.columnDescEquals(join1.getPrimaryKeyColumns(), join2.getPrimaryKeyColumns())) return false; return true; } }
public JoinsTree(TableRef rootTable, List<JoinDesc> joins) { for (JoinDesc join : joins) { for (TblColRef col : join.getForeignKeyColumns()) Preconditions.checkState(col.isQualified()); for (TblColRef col : join.getPrimaryKeyColumns()) Preconditions.checkState(col.isQualified()); } tableChains.put(rootTable.getAlias(), new Chain(rootTable, null, null)); for (JoinDesc join : joins) { TableRef pkSide = join.getPKSide(); Chain fkSide = tableChains.get(join.getFKSide().getAlias()); tableChains.put(pkSide.getAlias(), new Chain(pkSide, join, fkSide)); } }
if (!dimTableCache.contains(dimTable)) { TblColRef[] pk = join.getPrimaryKeyColumns(); TblColRef[] fk = join.getForeignKeyColumns(); if (pk.length != fk.length) { throw new RuntimeException("Invalid join condition of lookup table:" + lookupDesc);
for (TblColRef col : join.getForeignKeyColumns()) { dimCols.add(initDimensionColRef(col)); allColumns.addAll(Arrays.asList(join.getForeignKeyColumns())); allColumns.addAll(Arrays.asList(join.getPrimaryKeyColumns())); for (JoinTableDesc joinTable : model.getJoinTables()) { JoinDesc join = joinTable.getJoin(); int n = join.getForeignKeyColumns().length; for (int i = 0; i < n; i++) { TblColRef pk = join.getPrimaryKeyColumns()[i]; TblColRef fk = join.getForeignKeyColumns()[i]; if (realDimensions.contains(pk) && !realDimensions.contains(fk)) { initDimensionColRef(fk);
@Override public List<TblColRef> getAllColumns() { final Set<TblColRef> factTableColumnSet = Sets.newHashSet(); TableRef rootFactTable = getDataModel().getRootFactTable(); for (TblColRef colRef : flatDesc.getAllColumns()) { if (colRef.getTableRef().equals(rootFactTable)) { factTableColumnSet.add(colRef); } } // Add column which belongs to root fact table in join relation but lost for (JoinTableDesc joinTableDesc : getDataModel().getJoinTables()) { JoinDesc join = joinTableDesc.getJoin(); for (TblColRef colRef : join.getForeignKeyColumns()) { if (colRef.getTableRef().equals(rootFactTable)) { factTableColumnSet.add(colRef); } } } return new LinkedList<>(factTableColumnSet); }
private ColumnDesc findPk(JoinTableDesc joinTable, ColumnDesc fk) { TblColRef[] fkCols = joinTable.getJoin().getForeignKeyColumns(); for (int i = 0; i < fkCols.length; i++) { if (fkCols[i].getColumnDesc().equals(fk)) return joinTable.getJoin().getPrimaryKeyColumns()[i].getColumnDesc(); } return null; }
private TblColRef initDimensionColRef(DimensionDesc dim, String colName) { TblColRef col = model.findColumn(dim.getTable(), colName); // for backward compatibility if (KylinVersion.isBefore200(getVersion())) { // always use FK instead PK, FK could be shared by more than one lookup tables JoinDesc join = dim.getJoin(); if (join != null) { int idx = ArrayUtils.indexOf(join.getPrimaryKeyColumns(), col); if (idx >= 0) { col = join.getForeignKeyColumns()[idx]; } } } return initDimensionColRef(col); }
if (!dimTableCache.contains(dimTableName)) { TblColRef[] pk = join.getPrimaryKeyColumns(); TblColRef[] fk = join.getForeignKeyColumns(); if (pk.length != fk.length) { throw new RuntimeException("Invalid join condition of lookup table:" + lookupDesc);
public TblColRef findPKByFK(TblColRef fk) { assert isFactTable(fk.getTable()); TblColRef candidate = null; for (DimensionDesc dim : dimensions) { JoinDesc join = dim.getJoin(); if (join == null) continue; int find = ArrayUtils.indexOf(join.getForeignKeyColumns(), fk); if (find >= 0) { candidate = join.getPrimaryKeyColumns()[find]; if (join.getForeignKeyColumns().length == 1) { // is single // column join? break; } } } return candidate; }
public TblColRef findPKByFK(TblColRef fk, String joinType) { assert isFactTable(fk.getTable()); TblColRef candidate = null; for (LookupDesc dim : lookups) { JoinDesc join = dim.getJoin(); if (join == null) continue; if(joinType != null && !joinType.equals(join.getType())) continue; int find = ArrayUtils.indexOf(join.getForeignKeyColumns(), fk); if (find >= 0) { candidate = join.getPrimaryKeyColumns()[find]; if (join.getForeignKeyColumns().length == 1) { // is single // column join? break; } } } return candidate; }
for (TblColRef colRef : join.getForeignKeyColumns()) { fkIndice.add(colRef.getColumn().getZeroBasedIndex());
String fTable = j.getForeignKeyColumns()[0].getTable(); if (!factTable.equals(fTable)) { logger.info("Fact Table" + factTable + " not matched in join: " + j + " on cube " + cube.getName());
for (TblColRef ref : join.getForeignKeyColumns()) { TblColRef inited = initDimensionColRef(ref); dimColList.add(inited); TblColRef[] fk = join.getForeignKeyColumns(); TblColRef[] pk = join.getPrimaryKeyColumns(); for (int i = 0; i < fk.length; i++) {
for (TblColRef col : join.getForeignKeyColumns()) { dimCols.add(initDimensionColRef(col)); TblColRef[] fk = join.getForeignKeyColumns(); TblColRef[] pk = join.getPrimaryKeyColumns(); for (int i = 0; i < fk.length; i++) {
private void amendAllColumns() { // make sure all PF/FK are included, thus become exposed to calcite later Set<TableRef> tables = collectTablesOnJoinChain(allColumns); for (TableRef t : tables) { JoinDesc join = model.getJoinByPKSide(t); if (join != null) { allColumns.addAll(Arrays.asList(join.getForeignKeyColumns())); allColumns.addAll(Arrays.asList(join.getPrimaryKeyColumns())); } } for (TblColRef col : allColumns) { allColumnDescs.add(col.getColumnDesc()); } }
public JoinsTree(TableRef rootTable, List<JoinDesc> joins) { for (JoinDesc join : joins) { for (TblColRef col : join.getForeignKeyColumns()) Preconditions.checkState(col.isQualified()); for (TblColRef col : join.getPrimaryKeyColumns()) Preconditions.checkState(col.isQualified()); } tableChains.put(rootTable.getAlias(), new Chain(rootTable, null, null)); for (JoinDesc join : joins) { TableRef pkSide = join.getPKSide(); Chain fkSide = tableChains.get(join.getFKSide().getAlias()); tableChains.put(pkSide.getAlias(), new Chain(pkSide, join, fkSide)); } }
private ColumnDesc findPk(JoinTableDesc joinTable, ColumnDesc fk) { TblColRef[] fkCols = joinTable.getJoin().getForeignKeyColumns(); for (int i = 0; i < fkCols.length; i++) { if (fkCols[i].getColumnDesc().equals(fk)) return joinTable.getJoin().getPrimaryKeyColumns()[i].getColumnDesc(); } return null; }
private TblColRef initDimensionColRef(DimensionDesc dim, String colName) { TblColRef col = model.findColumn(dim.getTable(), colName); // for backward compatibility if (KylinVersion.isBefore200(getVersion())) { // always use FK instead PK, FK could be shared by more than one lookup tables JoinDesc join = dim.getJoin(); if (join != null) { int idx = ArrayUtils.indexOf(join.getPrimaryKeyColumns(), col); if (idx >= 0) { col = join.getForeignKeyColumns()[idx]; } } } return initDimensionColRef(col); }