Changeset: 23de9e63fc07 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/23de9e63fc07
Modified Files:
sql/server/sql_scan.c
Branch: default
Log Message:
keep inline comments only
diffs (67 lines):
diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c
--- a/sql/server/sql_scan.c
+++ b/sql/server/sql_scan.c
@@ -24,10 +24,14 @@
#include <ctype.h>
#include "sql_keyword.h"
+/**
+ * Removes all comments before the query. In query comments are kept.
+ */
char *
query_cleaned(sql_allocator *sa, const char *query)
{
- char *q, *r;
+ char *q, *r, *c;
+ int lines = 0;
int quote = 0; /* inside quotes ('..', "..", {..}) */
bool bs = false; /* seen a backslash in a quoted string
*/
bool incomment1 = false; /* inside traditional C style comment */
@@ -38,11 +42,19 @@ query_cleaned(sql_allocator *sa, const c
if(!r)
return NULL;
+ (void) c;
+
for (q = r; *query; query++) {
if (incomment1) {
if (*query == '/' && query[-1] == '*') {
incomment1 = false;
+ if (c == r && lines > 0) {
+ q = r; // reset to beginning
+ lines = 0;
+ continue;
+ }
}
+ if (*query == '\n') lines++;
*q++ = *query;
} else if (incomment2) {
if (*query == '\n') {
@@ -50,8 +62,10 @@ query_cleaned(sql_allocator *sa, const c
inline_comment = false;
/* add newline only if comment doesn't
* occupy whole line */
- if (q > r && q[-1] != '\n')
+ if (q > r && q[-1] != '\n'){
*q++ = '\n';
+ lines++;
+ }
} else if (inline_comment){
*q++ = *query; // preserve in line query
comments
}
@@ -78,11 +92,14 @@ query_cleaned(sql_allocator *sa, const c
incomment2 = true;
} else if (*query == '/' && query[1] == '*') {
incomment1 = true;
+ c = q;
*q++ = *query;
} else if (*query == '\n') {
/* collapse newlines */
- if (q > r && q[-1] != '\n')
+ if (q > r && q[-1] != '\n') {
*q++ = '\n';
+ lines++;
+ }
} else if (*query == ' ' || *query == '\t') {
/* collapse white space */
if (q > r && q[-1] != ' ')
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list