Skip to content

Idea: Add SQL prefix to generate RPG procedure #460

@SanjulaGanepola

Description

@SanjulaGanepola

To help with creating APIs in RPG for querying tables, I was thinking it would be useful to add an SQL prefix that goes beyond what rpg does and generates an actual RPG procedure.

For example, given:

select
       empno,
       rtrim(firstnme) || ' ' || rtrim(midinit) || ' ' || rtrim(lastname),
       salary + bonus + comm
from
       sample.employee
where
       empno = ?;

We could generate something like:

**free

ctl-opt nomain;

dcl-ds employee_t qualified template;
  empno char(6);
  name varchar(50);
  netincome packed(9:2);
end-ds;

dcl-proc getEmployee export;
  dcl-pi *n like(employee_t);
    empno char(6) const;
  end-pi;

  dcl-ds employee likeds(employee_t);

  exec sql
    select
      empno,
      rtrim(firstnme) || ' ' || rtrim(midinit) || ' ' || rtrim(lastname),
      salary + bonus + comm
    into
      :employee.empno,
      :employee.name,
      :employee.netincome
    from
      sample.employee
    where
      empno = :empno;

  return employee;
end-proc;

the template is basically:

**free

ctl-opt nomain;

dcl-ds <table_name>_t qualified template;
  <table_columns>
end-ds;

dcl-proc get<table_name> export;
  dcl-pi *n like(<table_name>_t);
    <prepared_statement_parameters>
  end-pi;

  dcl-ds <table_name> likeds(<table_name>_t);

  exec sql
    <user_query_with_into_added_and_where_with_parameters>

  return <table_name>;
end-proc;

This would tie in really well with the unit test stub generation. Imagine now (all now in a couple seconds!): Write an SQL query -> Generate an RPG procedure -> Generate a RPG test stub -> Celebrate! 🎉

The difficult part may be adding the into ... in the correct spot and properly handling the parameters, but I think this can be done.

Questions:

  • What prefix makes sense? Should this simply be rpg: or have a new prefix (rpgproc: or something else)? Change both prefixes to dcl-ds: and dcl-proc:?

@worksofliam @forstie What do you think about this?

Metadata

Metadata

Labels

enhancementNew feature or requestquestionFurther information is requested

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions