瀏覽代碼

[hl] update sqlite working with BLOB (#9048)

Constantine Teplyakov 5 年之前
父節點
當前提交
bc6eca1fdd
共有 1 個文件被更改,包括 18 次插入4 次删除
  1. 18 4
      std/hl/_std/sys/db/Sqlite.hx

+ 18 - 4
std/hl/_std/sys/db/Sqlite.hx

@@ -114,6 +114,10 @@ private class SqliteConnection implements Connection {
 				s.add(v);
 				s.add(v);
 			case TBool:
 			case TBool:
 				s.add(v ? 1 : 0);
 				s.add(v ? 1 : 0);
+			case TClass(haxe.io.Bytes):
+				s.add("x'");
+				s.add((v : haxe.io.Bytes).toHex());
+				s.add("'");
 			case _:
 			case _:
 				s.add(quote(Std.string(v)));
 				s.add(quote(Std.string(v)));
 		}
 		}
@@ -208,10 +212,20 @@ private class SqliteResultSet implements ResultSet {
 		while (i < l) {
 		while (i < l) {
 			var n:String = names[i];
 			var n:String = names[i];
 			var v:Dynamic = a[i];
 			var v:Dynamic = a[i];
-			if (hl.Type.getDynamic(v).kind == hl.Type.TypeKind.HBytes)
-				Reflect.setField(o, n, String.fromUCS2(v));
-			else
-				Reflect.setField(o, n, v);
+			switch (hl.Type.getDynamic(v).kind) {
+				case hl.Type.TypeKind.HArray:
+					var pair:hl.NativeArray<Dynamic> = v;
+					var bytes:hl.Bytes = pair[0];
+					var len:Int = pair[1];
+					var data = new haxe.io.BytesData(bytes, len);
+					Reflect.setField(o, n, haxe.io.Bytes.ofData(data));
+
+				case hl.Type.TypeKind.HBytes:
+					Reflect.setField(o, n, String.fromUCS2(v));
+
+				default:
+					Reflect.setField(o, n, v);
+			}
 			i++;
 			i++;
 		}
 		}
 		return o;
 		return o;