public string PropertySelectFragment(string name, string suffix, bool allProperties) { SelectFragment select = new SelectFragment(Factory.Dialect) .SetSuffix(suffix) .SetUsedAliases(IdentifierAliases); int[] columnTableNumbers = SubclassColumnTableNumberClosure; string[] columnAliases = SubclassColumnAliasClosure; string[] columns = SubclassColumnClosure; for (int i = 0; i < columns.Length; i++) { bool selectable = (allProperties || !subclassColumnLazyClosure[i]) && !IsSubclassTableSequentialSelect(columnTableNumbers[i]) && subclassColumnSelectableClosure[i]; if (selectable) { string subalias = GenerateTableAlias(name, columnTableNumbers[i]); select.AddColumn(subalias, columns[i], columnAliases[i]); } } int[] formulaTableNumbers = SubclassFormulaTableNumberClosure; string[] formulaTemplates = SubclassFormulaTemplateClosure; string[] formulaAliases = SubclassFormulaAliasClosure; for (int i = 0; i < formulaTemplates.Length; i++) { bool selectable = (allProperties || !subclassFormulaLazyClosure[i]) && !IsSubclassTableSequentialSelect(formulaTableNumbers[i]); if (selectable) { string subalias = GenerateTableAlias(name, formulaTableNumbers[i]); select.AddFormula(subalias, formulaTemplates[i], formulaAliases[i]); } } if (entityMetamodel.HasSubclasses) AddDiscriminatorToSelect(select, name, suffix); if (HasRowId) select.AddColumn(name, rowIdName, Loadable.RowIdAlias); return select.ToSqlStringFragment(); }
protected SelectFragment CreateSelect(int[] subclassColumnNumbers, int[] subclassFormulaNumbers) { SelectFragment selectFragment = new SelectFragment(Factory.Dialect); int[] columnTableNumbers = SubclassColumnTableNumberClosure; string[] columnAliases = SubclassColumnAliasClosure; string[] columns = SubclassColumnClosure; for (int i = 0; i < subclassColumnNumbers.Length; i++) { if (subclassColumnSelectableClosure[i]) { int columnNumber = subclassColumnNumbers[i]; string subalias = GenerateTableAlias(RootAlias, columnTableNumbers[columnNumber]); selectFragment.AddColumn(subalias, columns[columnNumber], columnAliases[columnNumber]); } } int[] formulaTableNumbers = SubclassFormulaTableNumberClosure; String[] formulaTemplates = SubclassFormulaTemplateClosure; String[] formulaAliases = SubclassFormulaAliasClosure; for (int i = 0; i < subclassFormulaNumbers.Length; i++) { int formulaNumber = subclassFormulaNumbers[i]; String subalias = GenerateTableAlias(RootAlias, formulaTableNumbers[formulaNumber]); selectFragment.AddFormula(subalias, formulaTemplates[formulaNumber], formulaAliases[formulaNumber]); } return selectFragment; }
protected override SelectFragment GenerateSelectFragment(string alias, string columnSuffix) { /* NH-1747 FIX Note: the fix for NH-1747 may cause some problem when the same ColumnName is used to represent two different properties in the same hierarchy In all our test it happened only for NHibernate.Test.Legacy.MultiTableTest.MultiTableCollections The mapping Multi.hbm.xml had a column named "parent" to represent the Key of a set for the relation Lower->Top and SubMulti->SubMulti everything in the same hierarchy NH TODO: Have to add an early check of same ColumnName used to represent two relations. */ var ojl = (IOuterJoinLoadable)ElementPersister; var selectFragment = new SelectFragment(Dialect).SetSuffix(columnSuffix); var columnNames = KeyColumnNames; var columnAliases = KeyColumnAliases; for (int i = 0; i < columnNames.Length; i++) { var column = columnNames[i]; var tableAlias = ojl.GenerateTableAliasForColumn(alias, column); selectFragment.AddColumn(tableAlias, column, columnAliases[i]); } return selectFragment; }
protected override void AddDiscriminatorToSelect(SelectFragment select, string name, string suffix) { if (IsDiscriminatorFormula) select.AddFormula(name, DiscriminatorFormulaTemplate, DiscriminatorAlias); else select.AddColumn(name, DiscriminatorColumnName, DiscriminatorAlias); }
protected virtual void AppendIndexColumns(SelectFragment frag, string alias) { if (hasIndex) { for (int i = 0; i < indexColumnIsSettable.Length; i++) { if (indexColumnIsSettable[i]) { frag.AddColumn(alias, indexColumnNames[i], indexColumnAliases[i]); } else { frag.AddFormula(alias, indexFormulaTemplates[i], indexColumnAliases[i]); } } } }
protected virtual void AppendIdentifierColumns(SelectFragment frag, string alias) { if (hasIdentifier) { frag.AddColumn(alias, identifierColumnName, identifierColumnAlias); } }
protected virtual void AppendElementColumns(SelectFragment frag, string elemAlias) { for (int i = 0; i < elementColumnIsSettable.Length; i++) { if (elementColumnIsSettable[i]) { frag.AddColumn(elemAlias, elementColumnNames[i], elementColumnAliases[i]); } else { frag.AddFormula(elemAlias, elementFormulaTemplates[i], elementColumnAliases[i]); } } }
protected override void AddDiscriminatorToSelect(SelectFragment select, string name, string suffix) { select.AddColumn(name, DiscriminatorColumnName, DiscriminatorAlias); }
public override SqlString PropertySelectFragment( string alias, string suffix ) { SelectFragment frag = new SelectFragment( factory.Dialect ) .SetSuffix( suffix ) .SetUsedAliases( IdentifierAliases ); for( int i = 0; i < subclassColumnClosure.Length; i++ ) { string subalias = Alias( alias, subclassColumnTableNumberClosure[ i ] ); frag.AddColumn( subalias, subclassColumnClosure[ i ], subclassColumnClosureAliases[ i ] ); } for( int i = 0; i < subclassFormulaTemplateClosure.Length; i++ ) { string subalias = Alias( alias, subclassFormulaTableNumberClosure[ i ] ); frag.AddFormula( subalias, subclassFormulaTemplateClosure[ i ], subclassFormulaAliasClosure[ i ] ); } if( HasSubclasses ) { SqlStringBuilder builder = new SqlStringBuilder( 3 ); builder.Add( StringHelper.CommaSpace ); builder.Add( DiscriminatorFragment( alias ) .SetReturnColumnName( DiscriminatorAlias, suffix ) .ToSqlStringFragment() ); builder.Add( frag.ToSqlStringFragment() ); return builder.ToSqlString(); } else { return frag.ToSqlStringFragment(); } }
public SqlString SelectFragment( string alias ) { SelectFragment frag = new SelectFragment( dialect ) .SetSuffix( String.Empty ) //always ignore suffix for collection columns .AddColumns( alias, keyColumnNames, keyColumnAliases ) .AddColumns( alias, elementColumnNames, elementColumnAliases ); if( hasIndex ) { frag.AddColumns( alias, indexColumnNames, indexColumnAliases ); } if( hasIdentifier ) { frag.AddColumn( alias, identifierColumnName, identifierColumnAlias ); } return frag.ToSqlStringFragment( false ); }
public string PropertySelectFragment(string name, string suffix) { SelectFragment select = new SelectFragment(Factory.Dialect) .SetSuffix(suffix) .SetUsedAliases(IdentifierAliases); int[] columnTableNumbers = SubclassColumnTableNumberClosure; string[] columnAliases = SubclassColumnAliasClosure; string[] columns = SubclassColumnClosure; for (int i = 0; i < columns.Length; i++) { string subalias = Alias(name, columnTableNumbers[i]); select.AddColumn(subalias, columns[i], columnAliases[i]); } int[] formulaTableNumbers = SubclassFormulaTableNumberClosure; string[] formulaTemplates = SubclassFormulaTemplateClosure; string[] formulaAliases = SubclassFormulaAliasClosure; for (int i = 0; i < formulaTemplates.Length; i++) { string subalias = Alias(name, formulaTableNumbers[i]); select.AddFormula(subalias, formulaTemplates[i], formulaAliases[i]); } if (HasSubclasses) { AddDiscriminatorToSelect(select, name, suffix); } return select.ToSqlStringFragment(); }