psql.diff
text/x-diff
Filename: psql.diff
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/bin/psql/psqlscan.l | 0 | 0 |
diff --git a/src/bin/psql/psqlscan.l b/src/bin/psql/psqlscan.l
new file mode 100644
index 1208c8f..3732dc5
*** a/src/bin/psql/psqlscan.l
--- b/src/bin/psql/psqlscan.l
*************** other .
*** 934,949 ****
}
! <xslasharg>{
/*
* Default processing of text in a slash command's argument.
*
* Note: unquoted_option_chars counts the number of characters at the
* end of the argument that were not subject to any form of quoting.
* psql_scan_slash_option needs this to strip trailing semicolons safely.
*/
! {space}|"\\" {
/*
* Unquoted space is end of arg; do not eat. Likewise
* backslash is end of command or next command, do not eat
--- 934,956 ----
}
!
/*
* Default processing of text in a slash command's argument.
+ * It shares token actions with xslasharg and xslashwholeline.
*
* Note: unquoted_option_chars counts the number of characters at the
* end of the argument that were not subject to any form of quoting.
* psql_scan_slash_option needs this to strip trailing semicolons safely.
*/
! <xslashwholeline>{space}+ {
! /* process entire line, but suppress leading whitespace */
! if (output_buf->len > 0)
! ECHO;
! }
!
! <xslasharg>{space}|"\\" {
/*
* Unquoted space is end of arg; do not eat. Likewise
* backslash is end of command or next command, do not eat
*************** other .
*** 957,982 ****
return LEXRES_OK;
}
! {quote} {
! *option_quote = '\'';
! unquoted_option_chars = 0;
! BEGIN(xslashquote);
! }
!
! "`" {
backtick_start_offset = output_buf->len;
*option_quote = '`';
unquoted_option_chars = 0;
BEGIN(xslashbackquote);
}
! {dquote} {
ECHO;
*option_quote = '"';
unquoted_option_chars = 0;
BEGIN(xslashdquote);
}
:{variable_char}+ {
/* Possible psql variable substitution */
if (option_type == OT_NO_EVAL)
--- 964,1005 ----
return LEXRES_OK;
}
! <xslasharg>"`" {
! /* Only in xslasharg, so backticks are potentially passed to the shell */
backtick_start_offset = output_buf->len;
*option_quote = '`';
unquoted_option_chars = 0;
BEGIN(xslashbackquote);
}
! <xslasharg>{quote} {
! *option_quote = '\'';
! unquoted_option_chars = 0;
! BEGIN(xslashquote);
! }
!
! <xslasharg>{dquote} {
ECHO;
*option_quote = '"';
unquoted_option_chars = 0;
BEGIN(xslashdquote);
}
+ <xslasharg>{other} {
+ unquoted_option_chars++;
+ ECHO;
+ }
+
+ <xslashwholeline>{other} { ECHO; }
+
+ /*
+ * This code allows variable processing in slasharg and wholeline
+ * modes. wholeline does not allow quoting to prevent variable
+ * subtitution because quote detection would remove the quotes.
+ */
+
+ <xslasharg,xslashwholeline>{
+
:{variable_char}+ {
/* Possible psql variable substitution */
if (option_type == OT_NO_EVAL)
*************** other .
*** 1044,1054 ****
ECHO;
}
- {other} {
- unquoted_option_chars++;
- ECHO;
- }
-
}
<xslashquote>{
--- 1067,1072 ----
*************** other .
*** 1115,1133 ****
}
- <xslashwholeline>{
- /* copy everything until end of input line */
- /* but suppress leading whitespace */
-
- {space}+ {
- if (output_buf->len > 0)
- ECHO;
- }
-
- {other} { ECHO; }
-
- }
-
<xslashend>{
/* at end of command, eat a double backslash, but not anything else */
--- 1133,1138 ----