Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Viewing a Simple Three-Step Execution Plan

See more CURL Examples

This example demonstrates a straightforward, valid dependency chain that results in a three-step execution plan. The goal is not to execute the requests, but to inspect how the plan is constructed using ExaminePlan.

The target curl command requires {{order_id}}. A helper function is defined to produce order_id, but it depends on customer_id. Another helper function produces customer_id, which depends on account_name.

Because account_name is provided as a known input, the dependency chain can be fully resolved:

  • customer_id is obtained from account_name
  • order_id is obtained from customer_id
  • The target curl command uses order_id

When ExaminePlan is called, it builds and returns a three-step execution plan showing the order in which each function would be executed.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.JsonObject,
  Chilkat.HttpCurl;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  httpCurl: THttpCurl;
  targetCurl: string;
  fnName: string;
  planJson: TJsonObject;

begin
  success := False;

  httpCurl := THttpCurl.Create;

  //  The target curl command requires {{order_id}}.
  targetCurl := 'curl -X GET https://api.example.com/orders/{{order_id}}';

  //  Define a helper function that produces order_id from customer_id.
  fnName := 'getOrderId';
  httpCurl.AddFunction(fnName,'curl -X GET https://api.example.com/order-id?customer={{customer_id}}');
  httpCurl.AddOutput(fnName,'order.id','order_id');

  //  Define a helper function that produces customer_id from account_name.
  fnName := 'getCustomerId';
  httpCurl.AddFunction(fnName,'curl -X GET https://api.example.com/customer-id?account={{account_name}}');
  httpCurl.AddOutput(fnName,'customer.id','customer_id');

  //  Provide the starting known input.
  httpCurl.SetVar('account_name','acme');

  //  Examine the execution plan without running any requests.
  planJson := TJsonObject.Create;
  planJson.EmitCompact := False;

  success := httpCurl.ExaminePlan(targetCurl,planJson);

  //  Success is expected to be True.
  WriteLn('success = ' + success);

  WriteLn(planJson.Emit());

  //  Expected result:
  //  
  //  {
  //    "plan": [{
  //      "function": "getCustomerId",
  //      "inputs": ["account_name"],
  //      "outputs": ["customer_id"]
  //    },{
  //      "function": "getOrderId",
  //      "inputs": ["customer_id"],
  //      "outputs": ["order_id"]
  //    },{
  //      "function": "targetCurl",
  //      "inputs": ["order_id"],
  //      "outputs": []
  //    }]
  //  }


  httpCurl.Free;
  planJson.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.