Github user paul-rogers commented on a diff in the pull request:
https://github.com/apache/drill/pull/972#discussion_r143107377
--- Diff:
logical/src/main/java/org/apache/drill/common/expression/SchemaPath.java ---
@@ -264,6 +264,56 @@ public String getRootSegmentPath() {
return rootSegment.getPath();
}
+ /**
+ * Returns {@code String} representation of this schema path,
+ * quoting all name segments if specified {@code quote} is true or
quoting
+ * only those name segments which have a complex name (their name
contains dots).
+ *
+ * @param quoted is name segment should be quoted
+ * @return the {@code String} representation of this {@code SchemaPath}
+ * @throws IllegalStateException if root segment is {@code ArraySegment}
+ */
+ public String asPathString(boolean quoted) throws RuntimeException {
+ StringBuilder sb = new StringBuilder();
+ PathSegment seg = rootSegment;
+ if (seg.isArray()) {
+ throw new IllegalStateException("Drill doesn't currently support top
level arrays");
+ }
+ NameSegment nameSegment = seg.getNameSegment();
+ writeQuoted(sb, nameSegment.getPath(), quoted ||
nameSegment.isComplex());
+
+ while ((seg = seg.getChild()) != null) {
+ if (seg.isNamed()) {
+ nameSegment = seg.getNameSegment();
+ sb.append('.');
+ writeQuoted(sb, nameSegment.getPath(), quoted ||
nameSegment.isComplex());
--- End diff --
If `isComplex()` is meant to indicate that a name must be quoted, then
`requiresQuotes()` would be a better name. Some other names that require quotes:
{noformat}
names with spaces
names-with-dashes
anything/with+an*operator
$looks$like$internal$name
maybeEvenCaseSensitive
MAYBEeVENcASEsENSIVIVE
&so!on
...
{noformat}
Basically, anything that is not a symbol (initial alpha followed by any
number of alphanumeric...)
---