class SqlInfo {

    private final Project project;
    private final Dbms dbms;
    private final DbmsType dbmsType;
    private final DatabaseNamingConvention naming;
    private final FieldPredicateView fieldPredicateView;
    private final List<Stage<?>> stages;

    SqlInfo(
        final DbmsHandlerComponent dbmsHandlerComponent,
        final Project project,
        final List<Stage<?>> stages
    ) {
        requireNonNull(project);
        requireNonNull(dbmsHandlerComponent);
        this.stages = requireNonNull(stages);
        this.project = project;
        this.dbms = requireSameDbms(project, stages);
        this.dbmsType = DatabaseUtil.dbmsTypeOf(dbmsHandlerComponent, dbms);
        this.naming = dbmsType.getDatabaseNamingConvention();
        this.fieldPredicateView = dbmsType.getFieldPredicateView();
    }

    Project project() {
        return project;
    }

    Dbms dbms() {
        return dbms;
    }

    DbmsType dbmsType() {
        return dbmsType;
    }

    DatabaseNamingConvention namingConvention() {
        return naming;
    }

    FieldPredicateView fieldPredicateView() {
        return fieldPredicateView;
    }

    List<SqlStage> sqlStages() {<FILL_FUNCTION_BODY>}

}

        final List<SqlStage> sqlStages = new ArrayList<>();
        for (int i = 0; i < stages.size(); i++) {
            sqlStages.add(new SqlStage(this, stages.get(i), i));
        }
        return sqlStages;
    
<no_super_class>