# Code & SQL Text Search

> This report performs text string searches across PeopleCode programs (PSPCMTXT), SQL Objects (PSSQLTEXTDEFN), and Application Engine SQL statements (PSAESTMTDEFN).

---

LLMS index: [llms.txt](/llms.txt)

---

<div class="alert alert-primary border shadow-sm mb-4" role="note">
  <div class="d-flex flex-column flex-lg-row align-items-lg-center justify-content-between gap-3">
    <div>
      <strong>New to psLens?</strong> This page documents one specific report. To see how it runs in the product, what
      the output looks like, and how teams use it in practice, start with a live walkthrough.
    </div>
    <div class="d-flex flex-wrap gap-2">
      <a class="btn btn-sm btn-primary" href="/contact/">Book a Demo</a>
      <a class="btn btn-sm btn-outline-primary" href="/docs/reports/">Browse Reports</a>
    </div>
  </div>
</div><div id="pslens-context-panel" class="card border-info mb-4 d-none">
  <div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle">
    <i class="bi bi-info-circle-fill me-2"></i>
    <span>Tailored Operational Context</span>
  </div>
  <div class="card-body p-0">
    <ul class="list-group list-group-flush">
      <li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Target Database:</strong>
        <span id="ctx-db" class="badge bg-secondary font-monospace">&mdash;</span>
      </li>
      <li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Context Type:</strong>
        <span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase">&mdash;</span>
      </li>
      <li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Alert Severity:</strong>
        <span id="ctx-severity" class="badge">&mdash;</span>
      </li>
      <li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Triggered Time:</strong>
        <span id="ctx-time" class="text-muted small">&mdash;</span>
      </li>
      <li id="row-details" class="list-group-item py-2 d-none">
        <strong id="label-details" class="d-block mb-1">Firing Context:</strong>
        <code id="ctx-details" class="d-block p-2 bg-light border rounded small"
          style="white-space: pre-wrap; word-break: break-all;">&mdash;</code>
      </li>
    </ul>
  </div>
</div>

<script>
  (function () {
    const params = new URLSearchParams(window.location.search);
    const metadata = params.get('metadata');
    if (!metadata) return;

    try {
      
      const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
      const jsonStr = decodeURIComponent(escape(window.atob(base64)));
      const data = JSON.parse(jsonStr);

      if (data) {
        let hasData = false;

        if (data.db) {
          document.getElementById('ctx-db').textContent = data.db;
          document.getElementById('row-db').classList.remove('d-none');
          hasData = true;
        }

        if (data.type) {
          document.getElementById('ctx-type').textContent = data.type;
          document.getElementById('row-type').classList.remove('d-none');
          hasData = true;
        }

        if (data.severity) {
          const severityBadge = document.getElementById('ctx-severity');
          const severity = data.severity.toLowerCase();
          severityBadge.textContent = severity.toUpperCase();
          if (severity === 'critical') {
            severityBadge.className = 'badge bg-danger';
          } else if (severity === 'warning') {
            severityBadge.className = 'badge bg-warning text-dark';
          } else {
            severityBadge.className = 'badge bg-info';
          }
          document.getElementById('row-severity').classList.remove('d-none');
          hasData = true;
        }

        if (data.t) {
          const date = new Date(data.t * 1000);
          document.getElementById('ctx-time').textContent = date.toLocaleString();
          document.getElementById('row-time').classList.remove('d-none');
          hasData = true;
        }

        if (data.details) {
          document.getElementById('ctx-details').textContent = data.details;

          
          const labelDetails = document.getElementById('label-details');
          if (data.type === 'object') {
            labelDetails.textContent = 'Object Metadata Details:';
          } else if (data.type === 'report') {
            labelDetails.textContent = 'Report Description:';
          } else {
            labelDetails.textContent = 'Firing Context:';
          }

          document.getElementById('row-details').classList.remove('d-none');
          hasData = true;
        }

        if (hasData) {
          document.getElementById('pslens-context-panel').classList.remove('d-none');
        }
      }
    } catch (e) {
      console.error('Failed to parse operational context metadata:', e);
    }
  })();
</script>

## Code & SQL Text Search Report

**Report ID:** `code-sql-search`  
**Category:** Objects / Development

## Purpose

The Code & SQL Text Search report performs text searches across PeopleCode, standalone SQL Objects, and Application Engine SQL statements. It returns matched line numbers, surrounding code context, and deep links to psLens detail pages.

Use this report when searching for references to deprecated fields, custom function calls, hardcoded URLs, or specific SQL statements.

---

## Metadata Tables Searched

1. **`PSPCMTXT` (PeopleCode Source Text):**
   Searches plain-text PeopleCode across Record, Page, Component, Component Interface, App Package, Message, App Engine, and Menu PeopleCode programs. Concatenates multi-row `PROGSEQ` sequences to compute line numbers and extract 2-line code context.

2. **`PSSQLTEXTDEFN` (SQL Object Source Text):**
   Searches SQL text for views, standalone SQL objects, App Engine SQL definitions, and App Class SQL statements. Concatenates multi-row `SEQNUM` rows to return line-level matches.

3. **`PSAESTMTDEFN` (App Engine SQL Actions):**
   Searches inline SQL action statements embedded directly within Application Engine steps.

---

## Report Output

The generated Markdown output contains:

- **Summary:** Total match counts broken down by PeopleCode, SQL Objects, and App Engine SQL.
- **PeopleCode Matches:** Program type, record or package name, event or class name, line number, and a syntax-highlighted code block with surrounding context lines and a match indicator (`<-- MATCH`).
- **SQL Object Matches:** SQL ID, line number, code snippet, and deep links to `/sqlobjects/{SQLID}`.
- **App Engine SQL Matches:** Application Engine ID, section, step, line number, code snippet, and deep links to `/appengines/{APPLID}`.

---

## Parameters

| Parameter | Required | Type | Default | Description |
| :--- | :--- | :--- | :--- | :--- |
| `search_term` | Yes | String | | The text string to search for across code and SQL text. |
| `scope` | No | String | `All` | Search scope: `All`, `PeopleCode`, or `SQL`. |
| `case_sensitive` | No | Boolean | `false` | Set to `true` to perform exact case-sensitive text matching. |
| `custom_only` | No | Boolean | `false` | Set to `true` to filter for items last updated by non-`PPLSOFT` user IDs. |
| `max_results` | No | Integer | `200` | Maximum total matches to return in the report output. |

---

## Use Cases

1. **Impact Analysis:** Before modifying a record field or function signature, search `PSPCMTXT` to locate all calling locations.
2. **Hardcoded Reference Audit:** Search for hardcoded URL paths, IP addresses, or environment-specific strings in PeopleCode and SQL objects.
3. **Upgrade & Tax Update Triage:** Search for modified SQL views or Application Engine SQL statements when evaluating target database releases.
