code: public static Expression select(String field, String operator, Val<Expression>[] args, EbeanExprInvoker invoker) {
          if (args.length > 0) {
              EbeanServer server = invoker.getServer();
              Class type = Filters.getBeanTypeByName(field, (SpiEbeanServer) server);
              if (type == null) {
                  throw new QuerySyntaxException(Messages.get("dsl.bean.type.err", field));
              }
              Query q = Filters.createQuery(type, server);
              ExpressionList<?> et = q.select(args[0].string()).where();
              for (int i = 1; i < args.length; i++) {
                  Object o = args[i].object();
                  if (o instanceof HavingExpression) {
                      ExpressionList having = q.having();
                      ((HavingExpression) o).expressionList.forEach(having::add);
                  } else if (o instanceof DistinctExpression) {
                      et.setDistinct(((DistinctExpression) o).distinct);
                  } else if (o instanceof Expression) {
                      et.add(args[i].expr());
                  } else {
                      throw new QuerySyntaxException(Messages.get("dsl.arguments.error3", operator));
                  }
              }
              EbeanUtils.checkQuery(q, invoker.getInjectionManager());
              return QueryExpression.of(q);
          }
          throw new QuerySyntaxException(Messages.get("dsl.arguments.error0", operator));
      }
docs: <p>select.</p>
  
  @param field a {@link java.lang.String} object.
  @param operator a {@link java.lang.String} object.
  @param args an array of {@link ameba.db.dsl.QueryExprMeta.Val} objects.
  @param invoker a {@link ameba.db.ebean.filter.EbeanExprInvoker} object.
  @return a {@link io.ebean.Expression} object.