예제 #1
0
		private void InitStatementString(IOuterJoinLoadable elementPersister, string alias, int batchSize, SqlString subquery)
		{
			int joins = CountEntityPersisters(associations);
			Suffixes = BasicLoader.GenerateSuffixes(joins + 1);

			int collectionJoins = CountCollectionPersisters(associations) + 1;
			CollectionSuffixes = BasicLoader.GenerateSuffixes(joins + 1, collectionJoins);

			SqlStringBuilder whereString = WhereString(alias, oneToManyPersister.KeyColumnNames, subquery, batchSize);
			string filter = oneToManyPersister.FilterFragment(alias, EnabledFilters);
			whereString.Insert(0, StringHelper.MoveAndToBeginning(filter));

			JoinFragment ojf = MergeOuterJoins(associations);
			SqlSelectBuilder select =
				new SqlSelectBuilder(Factory).SetSelectClause(
					oneToManyPersister.SelectFragment(null, null, alias, Suffixes[joins], CollectionSuffixes[0], true)
					+ SelectString(associations)).SetFromClause(elementPersister.FromTableFragment(alias)
					                                            + elementPersister.FromJoinFragment(alias, true, true)).SetWhereClause(
					whereString.ToSqlString()).SetOuterJoins(ojf.ToFromFragmentString,
					                                         ojf.ToWhereFragmentString
					                                         + elementPersister.WhereJoinFragment(alias, true, true));

			select.SetOrderByClause(OrderBy(associations, oneToManyPersister.GetSQLOrderByString(alias)));

			if (Factory.Settings.IsCommentsEnabled)
			{
				select.SetComment("load one-to-many " + oneToManyPersister.Role);
			}

			SqlString = select.ToSqlString();
		}
예제 #2
0
        protected void InitStatementString(
            IList associations,
            SqlString condition,
            string orderBy,
            ISessionFactoryImplementor factory)
        {
            int joins = CountClassPersisters(associations);

            Suffixes = GenerateSuffixes(joins + 1);

            JoinFragment ojf = MergeOuterJoins(associations);

            this.SqlString = new SqlSelectBuilder(factory)
                             .SetSelectClause(
                persister.SelectFragment(alias, Suffixes[joins]) +
                SelectString(associations, factory)
                )
                             .SetFromClause(
                persister.FromTableFragment(alias).Append(
                    persister.FromJoinFragment(alias, true, true))
                )
                             .SetWhereClause(condition)
                             .SetOuterJoins(
                ojf.ToFromFragmentString,
                ojf.ToWhereFragmentString.Append(GetWhereFragment())
                )
                             .SetOrderByClause(orderBy)
                             .ToSqlString();
        }
        private void InitStatementString(IOuterJoinLoadable elementPersister, string alias, int batchSize, SqlString subquery)
        {
            int joins = CountEntityPersisters(associations);

            Suffixes = BasicLoader.GenerateSuffixes(joins + 1);

            int collectionJoins = CountCollectionPersisters(associations) + 1;

            CollectionSuffixes = BasicLoader.GenerateSuffixes(joins + 1, collectionJoins);

            SqlStringBuilder whereString = WhereString(oneToManyPersister.GenerateTableAliasForKeyColumns(alias), oneToManyPersister.KeyColumnNames, subquery, batchSize);
            string           filter      = oneToManyPersister.FilterFragment(alias, EnabledFilters);

            whereString.Insert(0, StringHelper.MoveAndToBeginning(filter));

            JoinFragment     ojf    = MergeOuterJoins(associations);
            SqlSelectBuilder select =
                new SqlSelectBuilder(Factory).SetSelectClause(
                    oneToManyPersister.SelectFragment(null, null, alias, Suffixes[joins], CollectionSuffixes[0], true)
                    + SelectString(associations)).SetFromClause(elementPersister.FromTableFragment(alias)
                                                                + oneToManyPersister.FromJoinFragment(alias, true, true)).SetWhereClause(
                    whereString.ToSqlString()).SetOuterJoins(ojf.ToFromFragmentString,
                                                             ojf.ToWhereFragmentString
                                                             + elementPersister.WhereJoinFragment(alias, true, true));

            select.SetOrderByClause(OrderBy(associations, oneToManyPersister.GetSQLOrderByString(alias)));

            if (Factory.Settings.IsCommentsEnabled)
            {
                select.SetComment("load one-to-many " + oneToManyPersister.Role);
            }

            SqlString = select.ToSqlString();
        }
        private void InitStatementString(
            IQueryableCollection collPersister,
            IOuterJoinLoadable persister,
            string alias,
            IList associations,
            int batchSize,
            ISessionFactoryImplementor factory
            )
        {
            int joins = associations.Count;

            Suffixes = GenerateSuffixes(joins + 1);

            SqlStringBuilder whereSqlString = WhereString(factory, alias, collPersister.KeyColumnNames, collPersister.KeyType, batchSize);

            if (collectionPersister.HasWhere)
            {
                whereSqlString
                .Add(" and ")
                .Add(collectionPersister.GetSQLWhereString(alias));
            }

            JoinFragment ojf = MergeOuterJoins(associations);

            SqlSelectBuilder select = new SqlSelectBuilder(factory)
                                      .SetSelectClause(
                collectionPersister.SelectFragment(alias, Suffixes[joins], true).ToString() +
                SelectString(associations, factory)
                )
                                      .SetFromClause(
                persister.FromTableFragment(alias).Append(
                    persister.FromJoinFragment(alias, true, true)
                    )
                )
                                      .SetWhereClause(whereSqlString.ToSqlString())
                                      .SetOuterJoins(
                ojf.ToFromFragmentString,
                ojf.ToWhereFragmentString.Append(
                    persister.WhereJoinFragment(alias, true, true)
                    )
                );

            if (collectionPersister.HasOrdering)
            {
                select.SetOrderByClause(collectionPersister.GetSQLOrderByString(alias));
            }

            SqlString = select.ToSqlString();
        }
예제 #5
0
        private void InitStatementString(SqlString projection, SqlString condition,
                                         SqlString orderBy, string groupBy, SqlString having, LockMode lockMode)
        {
            int joins = CountEntityPersisters(associations);

            Suffixes = BasicLoader.GenerateSuffixes(joins + 1);
            JoinFragment ojf = MergeOuterJoins(associations);

            SqlString selectClause = projection
                                     ??
                                     new SqlString(persister.SelectFragment(alias, Suffixes[joins]) + SelectString(associations));

            SqlSelectBuilder select = new SqlSelectBuilder(Factory)
                                      .SetLockMode(lockMode)
                                      .SetSelectClause(selectClause)
                                      .SetFromClause(Dialect.AppendLockHint(lockMode, persister.FromTableFragment(alias)) + persister.FromJoinFragment(alias, true, true))
                                      .SetWhereClause(condition)
                                      .SetOuterJoins(ojf.ToFromFragmentString, ojf.ToWhereFragmentString + WhereFragment)
                                      .SetOrderByClause(OrderBy(associations, orderBy))
                                      .SetGroupByClause(groupBy)
                                      .SetHavingClause(having);

            if (Factory.Settings.IsCommentsEnabled)
            {
                select.SetComment(Comment);
            }

            SqlString = select.ToSqlString();
        }
		private void InitStatementString(
			IQueryableCollection collPersister,
			IOuterJoinLoadable persister,
			string alias,
			IList associations,
			int batchSize,
			ISessionFactoryImplementor factory
			)
		{
			int joins = associations.Count;

			Suffixes = GenerateSuffixes( joins + 1 );

			SqlStringBuilder whereSqlString = WhereString( factory, alias, collPersister.KeyColumnNames, collPersister.KeyType, batchSize );

			if( collectionPersister.HasWhere )
			{
				whereSqlString
					.Add( " and " )
					.Add( collectionPersister.GetSQLWhereString( alias ) );
			}

			JoinFragment ojf = MergeOuterJoins( associations );

			SqlSelectBuilder select = new SqlSelectBuilder( factory )
				.SetSelectClause(
					collectionPersister.SelectFragment( alias, Suffixes[ joins ], true ).ToString() +
					SelectString( associations, factory )
				)
				.SetFromClause(
					persister.FromTableFragment( alias ).Append(
					persister.FromJoinFragment( alias, true, true )
					)
				)
				.SetWhereClause( whereSqlString.ToSqlString() )
				.SetOuterJoins(
					ojf.ToFromFragmentString,
					ojf.ToWhereFragmentString.Append(
					persister.WhereJoinFragment( alias, true, true )
					)
				);

			if( collectionPersister.HasOrdering )
			{
				select.SetOrderByClause( collectionPersister.GetSQLOrderByString( alias ) );
			}

			SqlString = select.ToSqlString();
		}