(column: any, internals: GelKitInternals, tableName: string)
| 1535 | }; |
| 1536 | |
| 1537 | const defaultForColumn = (column: any, internals: GelKitInternals, tableName: string) => { |
| 1538 | const columnName = column.column_name; |
| 1539 | const isArray = internals?.tables[tableName]?.columns[columnName]?.isArray ?? false; |
| 1540 | |
| 1541 | if (column.column_default === null || column.column_default === undefined) return undefined; |
| 1542 | |
| 1543 | if (column.column_default.endsWith('[]')) { |
| 1544 | column.column_default = column.column_default.slice(0, -2); |
| 1545 | } |
| 1546 | |
| 1547 | column.column_default = column.column_default.replace(/::(.*?)(?<![^\w"])(?=$)/, ''); |
| 1548 | |
| 1549 | const columnDefaultAsString: string = column.column_default.toString(); |
| 1550 | |
| 1551 | if (isArray) { |
| 1552 | return columnDefaultAsString; |
| 1553 | } |
| 1554 | |
| 1555 | if (['integer', 'smallint', 'bigint', 'double precision', 'real'].includes(column.data_type)) { |
| 1556 | if (/^-?[\d.]+(?:e-?\d+)?$/.test(columnDefaultAsString)) { |
| 1557 | return Number(columnDefaultAsString); |
| 1558 | } else { |
| 1559 | if (typeof internals!.tables![tableName] === 'undefined') { |
| 1560 | internals!.tables![tableName] = { |
| 1561 | columns: { |
| 1562 | [columnName]: { |
| 1563 | isDefaultAnExpression: true, |
| 1564 | }, |
| 1565 | }, |
| 1566 | }; |
| 1567 | } else { |
| 1568 | if (typeof internals!.tables![tableName]!.columns[columnName] === 'undefined') { |
| 1569 | internals!.tables![tableName]!.columns[columnName] = { |
| 1570 | isDefaultAnExpression: true, |
| 1571 | }; |
| 1572 | } else { |
| 1573 | internals!.tables![tableName]!.columns[columnName]!.isDefaultAnExpression = true; |
| 1574 | } |
| 1575 | } |
| 1576 | return columnDefaultAsString; |
| 1577 | } |
| 1578 | } else if (column.data_type.includes('numeric')) { |
| 1579 | // if numeric(1,1) and used '99' -> psql stores like '99'::numeric |
| 1580 | return columnDefaultAsString.includes("'") ? columnDefaultAsString : `'${columnDefaultAsString}'`; |
| 1581 | } else if (column.data_type === 'json' || column.data_type === 'jsonb') { |
| 1582 | return `'${columnDefaultAsString}'`; |
| 1583 | } else if (column.data_type === 'boolean') { |
| 1584 | return column.column_default === 'true'; |
| 1585 | } else if (columnDefaultAsString === 'NULL') { |
| 1586 | return `NULL`; |
| 1587 | } else if (columnDefaultAsString.startsWith("'") && columnDefaultAsString.endsWith("'")) { |
| 1588 | return columnDefaultAsString; |
| 1589 | } else { |
| 1590 | return `${columnDefaultAsString.replace(/\\/g, '`\\')}`; |
| 1591 | } |
| 1592 | }; |
| 1593 | |
| 1594 | const getColumnsInfoQuery = ({ schema, table, db }: { schema: string; table: string; db: DB }) => { |
no outgoing calls
no test coverage detected