diff --git a/src/com/wentch/redkale/convert/json/JsonByteBufferWriter.java b/src/com/wentch/redkale/convert/json/JsonByteBufferWriter.java index e430a3a84..bb7c46ee3 100644 --- a/src/com/wentch/redkale/convert/json/JsonByteBufferWriter.java +++ b/src/com/wentch/redkale/convert/json/JsonByteBufferWriter.java @@ -197,47 +197,50 @@ public final class JsonByteBufferWriter extends JsonWriter { writeNull(); return; } - final char[] chs = Utility.charArray(value); - int len = 0; - for (char ch : chs) { + ByteBuffer buffer = this.buffers[index]; + expand(1); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) '"'); + + for (char ch : Utility.charArray(value)) { switch (ch) { - case '\n': len += 2; + case '\n': expand(2); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) '\\'); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) 'n'); break; - case '\r': len += 2; + case '\r': expand(2); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) '\\'); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) 'r'); break; - case '\t': len += 2; + case '\t': expand(2); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) '\\'); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) 't'); break; - case '\\': len += 2; + case '\\': expand(2); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) '\\'); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) '\\'); break; - case '"': len += 2; + case '"': expand(2); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) '\\'); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) '"'); break; - default: len++; + default: buffer = putChar(buffer, ch); break; } } - if (len == chs.length) { - writeTo(true, chs, 0, len); - } else { - StringBuilder sb = new StringBuilder(value.length() * 2); - for (char ch : chs) { - switch (ch) { - case '\n': sb.append("\\n"); - break; - case '\r': sb.append("\\r"); - break; - case '\t': sb.append("\\t"); - break; - case '\\': sb.append("\\\\"); - break; - case '"': sb.append("\\\""); - break; - default: sb.append(ch); - break; - } - } - char[] cs = Utility.charArray(sb); - writeTo(true, cs, 0, sb.length()); - } + expand(1); + if (!buffer.hasRemaining()) buffer = nextByteBuffer(); + buffer.put((byte) '"'); } @Override diff --git a/src/com/wentch/redkale/source/FilterBeanNode.java b/src/com/wentch/redkale/source/FilterBeanNode.java index 570c861a5..6da5b83ef 100644 --- a/src/com/wentch/redkale/source/FilterBeanNode.java +++ b/src/com/wentch/redkale/source/FilterBeanNode.java @@ -85,8 +85,8 @@ final class FilterBeanNode extends FilterNode { final String jc = joinCol.column().isEmpty() ? secinfo.getPrimary().field() : joinCol.column(); if (first) { joinsb.append(" ").append(joinCol.type().name()).append(" JOIN ").append(secinfo.getTable()) - .append(" ").append(alias).append(" ON a.# = ").append(alias).append(".") - .append(secinfo.getSQLColumn(jc)); + .append(" ").append(alias).append(" ON a.").append(secinfo.getSQLColumn(jc)).append(" = ") + .append(alias).append(".").append(secinfo.getSQLColumn(jc)); } newnode.foreignEntity = secinfo; newnode.tabalis = alias; @@ -235,8 +235,7 @@ final class FilterBeanNode extends FilterNode { if (joinSQL == null || !first) return super.createFilterSQLExpress(first, info, bean); StringBuilder sb = super.createFilterSQLExpress(first, info, bean); if (joinSQL == null) return sb; - String jsql = joinSQL.replace("#", info.getSQLColumn(byjoinColumn)); - return new StringBuilder(sb.length() + jsql.length()).append(jsql).append(sb); + return new StringBuilder(sb.length() + joinSQL.length()).append(joinSQL).append(sb); } @Override