// @Override
        public FunctionSelectBuilder select(FunctionType function, String columnName)
        {
            GroupedQueryBuilderImpl queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);
            Column column = queryBuilder.findColumn(columnName);

            return(select(function, column));
        }
        // @Override
        public FunctionSelectBuilder select(FunctionType function, String columnName, Object[] functionParameters)
        {
            GroupedQueryBuilderImpl queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);
            Column column = queryBuilder.findColumn(columnName);

            return((FunctionSelectBuilder)select(function, column, functionParameters));
        }
        // @Override
        public SatisfiedSelectBuilder selectAll()
        {
            getQuery().selectAll();
            GroupedQueryBuilder queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);

            return(new SatisfiedSelectBuilderImpl(queryBuilder));
        }
        // @Override
        public ColumnSelectBuilder select(Column column)
        {
            if (column == null)
            {
                throw new ArgumentException("column cannot be null");
            }

            GroupedQueryBuilder queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);

            return(new ColumnSelectBuilderImpl(column, query, queryBuilder));
        }
        // @Override
        public SatisfiedSelectBuilder select(params Column[] columns)
        {
            if (columns == null)
            {
                throw new ArgumentException("columns cannot be null");
            }
            query.select(columns);
            GroupedQueryBuilder queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);

            return(new SatisfiedSelectBuilderImpl(queryBuilder));
        }
        // @Override
        public SatisfiedSelectBuilder select(String selectExpression, bool allowExpressionBasedSelectItem)
        {
            if (selectExpression == null)
            {
                throw new ArgumentException("selectExpression cannot be null");
            }

            query.select(selectExpression, allowExpressionBasedSelectItem);

            GroupedQueryBuilder queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);

            return(new SatisfiedSelectBuilderImpl(queryBuilder));
        }
        //v@Override
        public SatisfiedSelectBuilder select(params String[] columnNames)
        {
            if (columnNames == null)
            {
                throw new ArgumentException("columnNames cannot be null");
            }
            foreach (String columnName in columnNames)
            {
                select(columnName);
            }
            GroupedQueryBuilder queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);

            return(new SatisfiedSelectBuilderImpl(queryBuilder));
        }
        // @Override
        public GroupedQueryBuilder select(FunctionType function, Column column, Object[] functionParameters)
        {
            if (function == null)
            {
                throw new ArgumentException("functionType cannot be null");
            }
            if (column == null)
            {
                throw new ArgumentException("column cannot be null");
            }

            GroupedQueryBuilder queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);

            return(new FunctionSelectBuilderImpl(function, column, functionParameters, query, queryBuilder));
        }
        // @Override
        //public CountSelectBuilder<SatisfiedQueryBuilder<GroupedQueryBuilder>> selectCount()
        public CountSelectBuilder selectCount()
        {
            GroupedQueryBuilder queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);

            return(new CountSelectBuilderImpl(query, queryBuilder));
        }