87 lines
3.0 KiB
C#
87 lines
3.0 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Text;
|
||
using Newtonsoft.Json;
|
||
using Newtonsoft.Json.Linq;
|
||
|
||
namespace SQLFlowClient
|
||
{
|
||
class SQLFlowResult
|
||
{
|
||
private readonly int maxLength = 24814437;// json will not be formatted if the string length exceeds this number
|
||
public string json;
|
||
public bool data;
|
||
public bool error;
|
||
public bool dbobjs;
|
||
public bool sqlflow;
|
||
public bool graph;
|
||
|
||
public SQLFlowResult(string text)
|
||
{
|
||
if (text.Length <= maxLength)
|
||
{
|
||
var jobject = JObject.Parse(text);
|
||
json = jobject.ToString();
|
||
data = jobject.SelectToken("data") != null;
|
||
error = jobject.SelectToken("error") != null;
|
||
dbobjs = jobject.SelectToken("data.dbobjs") != null;
|
||
sqlflow = jobject.SelectToken("data.sqlflow") != null;
|
||
graph = jobject.SelectToken("data.graph") != null;
|
||
}
|
||
else
|
||
{
|
||
json = text;
|
||
data = false;
|
||
error = false;
|
||
dbobjs = false;
|
||
sqlflow = false;
|
||
graph = false;
|
||
|
||
using var reader = new JsonTextReader(new StringReader(text));
|
||
while (reader.Read())
|
||
{
|
||
if (reader.Value != null)
|
||
{
|
||
//Console.WriteLine("Token: {0}, Value: {1} ,Depth:{2}", reader.TokenType, reader.Value, reader.Depth);
|
||
if (reader.Depth > 3)
|
||
{
|
||
goto End;
|
||
}
|
||
if (reader.TokenType.ToString() == "PropertyName")
|
||
{
|
||
switch (reader.Value.ToString())
|
||
{
|
||
case "data":
|
||
data = true;
|
||
break;
|
||
case "error":
|
||
error = true;
|
||
break;
|
||
case "dbobjs":
|
||
dbobjs = true;
|
||
break;
|
||
case "sqlflow":
|
||
sqlflow = true;
|
||
break;
|
||
case "graph":
|
||
graph = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//Console.WriteLine("Token: {0}", reader.TokenType);
|
||
if (error || dbobjs || sqlflow || graph)
|
||
{
|
||
reader.Skip();
|
||
}
|
||
}
|
||
}
|
||
End: { }
|
||
}
|
||
}
|
||
}
|
||
}
|