001package gudusoft.gsqlparser.resolver2.format;
002
003/**
004 * Controls how identifier names are rendered for display output.
005 *
006 * <p>This mode determines the "visual style" of the output - whether to show
007 * raw SQL form with quotes, clean display form without quotes, or canonical form.</p>
008 *
009 * <p>Note: This is separate from {@link DisplayNamePolicy} which determines
010 * "which occurrence to use" when the same object appears multiple times with
011 * different spellings.</p>
012 *
013 * <h3>Example with SQL Server:</h3>
014 * <pre>
015 * SQL: SELECT [OrderID] FROM [dbo].[SalesOrder]
016 *
017 * DISPLAY:    dbo.SalesOrder, OrderID (quotes stripped, case preserved)
018 * SQL_RENDER: [dbo].[SalesOrder], [OrderID] (quotes preserved)
019 * CANONICAL:  dbo.salesorder, orderid (vendor-specific folding applied)
020 * </pre>
021 *
022 * @see DisplayNamePolicy
023 * @see DisplayNameNormalizer
024 */
025public enum DisplayNameMode {
026
027    /**
028     * Display mode: strip delimiters, preserve original case.
029     *
030     * <p>Recommended for debugging and test output. Produces clean, readable
031     * output that reflects what the user wrote (minus the quote noise).</p>
032     *
033     * <p>Examples:</p>
034     * <ul>
035     *   <li>{@code [OrderID]} → {@code OrderID}</li>
036     *   <li>{@code `kalyan-DB`} → {@code kalyan-DB}</li>
037     *   <li>{@code "MyTable"} → {@code MyTable}</li>
038     * </ul>
039     */
040    DISPLAY,
041
042    /**
043     * SQL render mode: preserve delimiters for valid SQL regeneration.
044     *
045     * <p>Use when output needs to be valid SQL that can be re-executed.
046     * Preserves necessary quotes/brackets for special characters and
047     * reserved words.</p>
048     *
049     * <p>Examples:</p>
050     * <ul>
051     *   <li>{@code [Order ID]} → {@code [Order ID]} (space requires brackets)</li>
052     *   <li>{@code `kalyan-DB`} → {@code `kalyan-DB`} (hyphen requires backticks)</li>
053     * </ul>
054     */
055    SQL_RENDER,
056
057    /**
058     * Canonical mode: apply vendor-specific case folding.
059     *
060     * <p>Produces output matching the database's internal canonical form.
061     * Useful for comparing against metadata or catalog information.</p>
062     *
063     * <p>Examples (vendor-dependent):</p>
064     * <ul>
065     *   <li>Oracle: {@code MyTable} → {@code MYTABLE} (unquoted folds to upper)</li>
066     *   <li>PostgreSQL: {@code MyTable} → {@code mytable} (unquoted folds to lower)</li>
067     *   <li>BigQuery: {@code MyTable} → {@code MyTable} (case-sensitive)</li>
068     * </ul>
069     */
070    CANONICAL
071}