Usando Expressões Primárias em SQL
Se quiser acompanhar os exemplos, consulte Dados de amostra para executar consultas para exibir dados de amostra e aprender a usar a console do OCI para criar as tabelas de exemplo e carregar dados usando arquivos JSON.
Expressões entre Parênteses
Expressões entre parênteses são usadas principalmente para alterar a precedência padrão entre operadores. Eles também são usados como uma ajuda sintática para misturar expressões de maneiras que, de outra forma, causariam ambiguidades sintáticas.
Exemplo:busque o nome completo, o número da etiqueta e os detalhes de roteamento dos passageiros que embarcam no JFK /traversing pelo JFK e seu destino seja MAD ou VIE.
SELECT fullName, bag.bagInfo.tagNum,
bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest
FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "JFK" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any "MAD" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any "VIE" )
Explicação: você deseja obter o nome completo, o número da etiqueta e os detalhes de roteamento dos passageiros. A primeira condição do filtro é que o ponto de embarque/trânsito seja JFK. Uma vez satisfeito, a segunda condição de filtro é que o destino seja MAD ou VIE. Use uma condição OR para filtrar o valor de destino.
Saída:
{"fullName":"Dierdre Amador","tagNum":"17657806240229","routing":"JFK/MAD","fltRouteDest":"MAD"}
{"fullName":"Rosalia Triplett","tagNum":"17657806215913","routing":"JFK/IST/VIE","fltRouteDest":["IST","VIE"]}
{"fullName":"Kendal Biddle","tagNum":"17657806296887","routing":"JFK/IST/VIE","fltRouteDest":["IST","VIE"]}
Expressões Case
A expressão CASE pesquisada é semelhante às instruções if-then-else de linguagens de programação tradicionais. Ele consiste em vários pares WHEN-THEN, seguidos por uma cláusula ELSE opcional no final. Cada expressão WHEN é uma condição, ou seja, deve retornar BOOLEAN. As expressões THEN e ELSE podem retornar qualquer sequência de itens. A expressão CASE é avaliada por meio da primeira avaliação das expressões WHEN de cima para baixo até a primeira que retorna verdadeiro. Se for a expressão i-th WHEN que retornar verdadeiro, a expressão i-th THEN será avaliada e seu resultado será o resultado de toda a expressão CASE. Se nenhuma expressão WHEN retornar true, então, se houver um ELSE, sua expressão será avaliada e seu resultado será o resultado de toda a expressão CASE; Caso contrário, o resultado da expressão CASE será a sequência vazia.
Exemplo:
SELECT
fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN "you have no bag info"
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN "you have one hop"
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN "you have two hops."
ELSE "you have three hops."
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762340683564
Explicação: Você deseja determinar quantos trânsitos existem para o passageiro bagInfo usando uma instrução CASE. Se a matriz flightLegs não tiver elementos, o passageiro não terá dados de bagagem. Quando o array flightLegs tem apenas um elemento, há apenas um ponto de trânsito. Da mesma forma, se a matriz flightLegs tiver dois elementos, haverá dois saltos. Há também três pontos de trânsito. Aqui você assume que uma bolsa pode ter no máximo três pontos de trânsito / saltos.
Saída:
{"fullName":"Mary Watson","NUMBER_HOPS":"you have two hops."}
Exemplo 2:Escreva uma consulta para alertar o sistema a atualizar o tagNum de passageiros se o valor existente não for uma string.
SELECT bag.bagInfo[].tagNum,
CASE
WHEN bag.bagInfo[0].tagNum is of type (NUMBER)
THEN "Tagnumber is not a STRING. Update the data"
ELSE "Tagnumber has correct datatype"
END AS tag_NUM_TYPE
FROM BaggageInfo bag
Explicação: O tagNum de passageiros no esquema bagInfo é um tipo de dados STRING. Mas o aplicativo poderia assumir um valor NUMBER como o valor de tagNum por engano. A consulta usa o operador "é do tipo" para capturar isso e solicita que o sistema atualize o tagNum se o valor existente não for uma string.
Saída (apenas algumas linhas são mostradas para brevidade).
{"tagNum":"17657806240001","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":"17657806224224","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":17657806243578,"tag_NUM_TYPE":"Tagnumber is not a STRING. Update the data"}
{"tagNum":"1765780623244","tag_NUM_TYPE":"Tagnumber has correct datatype"}
Expressão Cast
A expressão de conversão cria, se possível, novos itens de um determinado tipo de alvo a partir dos itens de sua sequência de entrada. Por exemplo, uma STRING pode ser convertida em TIMESTAMP(0) usando a expressão CAST.
Regras seguidas em uma expressão CAST:
-
Se o tipo de item de entrada for igual ao tipo de item de destino, a conversão será no-op: o próprio item de entrada será retornado.
-
Se o tipo de destino for um tipo de curinga diferente de JSON e o tipo do item de entrada for um subtipo do tipo de curinga, a conversão será no-op.
-
Se o tipo de destino for JSON, um erro será gerado se o item de entrada for do tipo atômico não json.
-
Se o tipo de destino for um tipo de matriz, um erro será gerado se o item de entrada não for uma matriz.
-
Se o tipo de destino for string, o item de entrada poderá ser de qualquer tipo. Isso significa que cada item pode ser convertido em uma string. Para timestamps, seu valor de string está em UTC e tem o formato
uuuu-MM-dd['T'HH:mm:ss]. -
Se o tipo de destino for um tipo atômico diferente da string, o item de entrada também deverá ser atômico.
-
-
Inteiros e longs podem ser convertidos em timestamps. O valor de entrada é interpretado como o número de milissegundos desde 1º de janeiro de 1970, 00:00:00 GMT.
-
Itens de string podem ser convertidos em todos os outros tipos atômicos. Se a conversão for bem-sucedida ou não depende de o valor real da string poder ser analisado em um valor que pertença ao domínio do tipo de destino.
-
Os itens de timestamp podem ser convertidos em todos os tipos de timestamp. Se o tipo de destino tiver uma precisão menor que a do item de entrada, o timestamp resultante será o mais próximo do timestamp de entrada na precisão de destino.
-
-
-
Para converter um STRING em TIMESTAMP, se a entrada tiver valores STRING no formato ISO-8601, ele será convertido automaticamente pelo runtime SQL no tipo de dados TIMESTAMP.
Observação:
A ISO8601 descreve uma maneira internacionalmente aceita de representar datas, horários e durações.
Sintaxe: Data com hora: AAAA-MM-DDThh:mm:ss[.s[s[s[s[s[s]]][Z|(+|-)hh:mm]
em que
- YYYY especifica o ano, como quatro dígitos decimais
- MM especifica o mês, como dois dígitos decimais, de 00 a 12
- DD especifica o dia, como dois dígitos decimais, de 00 a 31
- hh especifica a hora, como dois dígitos decimais, de 00 a 23
- mm especifica os minutos, como dois dígitos decimais, de 00 a 59
- ss[.s[s[s[s[s]]]]] especifica os segundos, como dois dígitos decimais, 00 a 59, opcionalmente seguido por um ponto decimal e 1 a 6 dígitos decimais (representando a parte fracionária de um segundo).
- Z especifica a hora UTC (fuso horário 0). (Também pode ser especificado por +00:00, mas não por -00:00.)
- (+|-)hh:mm especifica o fuso horário como diferença em relação ao UTC. (Uma das opções + ou - é obrigatória.)
Exemplo 1:busque a data de chegada da mala para o passageiro com um código de reserva DN3I4Q no formato TIMESTAMP(3).
SELECT CAST (bag.bagInfo.bagArrivalDate AS Timestamp(3))
AS BAG_ARRIVING_DATE
FROM BaggageInfo bag WHERE bag.confNo=DN3I4Q
Explicação: O bagArrivalDate é um STRING. Utilizando CAST, você está convertendo este campo em um formato TIMESTAMP.
Saída:
{"BAG_ARRIVING_DATE":"2019-02-15T21:21:00.000Z"}
Exemplo 2:Obtenha o nome completo e o número da etiqueta de todas as bagagens de clientes enviadas após 2019.
SELECT fullName, bag.ticketNo,
bag.bagInfo[].bagArrivalDate
FROM BaggageInfo bag WHERE
exists bag.bagInfo[$element.bagArrivalDate >="2019-01-01T00:00:00"]
Explicação:Você deseja filtrar e exibir detalhes da bagagem que é enviada após 2019. A data de chegada do repositório para cada elemento no array flightLegs é comparada com o timestamp fornecido (2019-01-01T00:00:00). Aqui a conversão está implícita, pois bagArrivalDate é uma STRING e é comparada diretamente com um valor de Timestamp estático. Uma função CAST explícita não é necessária quando uma conversão implícita pode ser feita. No entanto, seus dados devem estar no formato YYYY-MM-DDTHH:MI:SS . Em seguida, use a condição EXISTS para verificar se o bagInfo está presente para essa condição de timestamp.
Saída:
{"fullName":"Kendal Biddle","ticketNo":1762377974281,"bagArrivalDate":"2019-03-05T12:00:00Z"}
{"fullName":"Lucinda Beckman","ticketNo":1762320569757,"bagArrivalDate":"2019-03-12T15:05:00Z"}
{"fullName":"Adelaide Willard","ticketNo":1762392135540,"bagArrivalDate":"2019-02-15T21:21:00Z"}
{"fullName":"Raymond Griffin","ticketNo":1762399766476,"bagArrivalDate":"2019-02-03T08:09:00Z"}
{"fullName":"Elane Lemons","ticketNo":1762324912391,"bagArrivalDate":"2019-03-15T10:13:00Z"}
{"fullName":"Zina Christenson","ticketNo":1762390789239,"bagArrivalDate":"2019-02-04T10:08:00Z"}
{"fullName":"Zulema Martindale","ticketNo":1762340579411,"bagArrivalDate":"2019-02-25T20:15:00Z"}
{"fullName":"Dierdre Amador","ticketNo":1762376407826,"bagArrivalDate":"2019-03-07T13:51:00Z"}
{"fullName":"Henry Jenkins","ticketNo":176234463813,"bagArrivalDate":"2019-03-02T13:18:00Z"}
{"fullName":"Rosalia Triplett","ticketNo":1762311547917,"bagArrivalDate":"2019-02-12T07:04:00Z"}
{"fullName":"Lorenzo Phil","ticketNo":1762320369957,"bagArrivalDate":["2019-03-12T15:05:00Z","2019-03-12T16:25:00Z"]}
{"fullName":"Gerard Greene","ticketNo":1762341772625,"bagArrivalDate":"2019-03-07T16:01:00Z"}
{"fullName":"Adam Phillips","ticketNo":1762344493810,"bagArrivalDate":"2019-02-01T16:13:00Z"}
{"fullName":"Doris Martin","ticketNo":1762355527825,"bagArrivalDate":"2019-03-22T10:17:00Z"}
{"fullName":"Joanne Diaz","ticketNo":1762383911861,"bagArrivalDate":"2019-02-16T16:13:00Z"}
{"fullName":"Teena Colley","ticketNo":1762357254392,"bagArrivalDate":"2019-02-13T11:15:00Z"}
{"fullName":"Michelle Payne","ticketNo":1762330498104,"bagArrivalDate":"2019-02-02T23:59:00Z"}
{"fullName":"Mary Watson","ticketNo":1762340683564,"bagArrivalDate":"2019-03-14T06:22:00Z"}
{"fullName":"Omar Harvey","ticketNo":1762348904343,"bagArrivalDate":"2019-03-02T16:09:00Z"}
{"fullName":"Fallon Clements","ticketNo":1762350390409,"bagArrivalDate":"2019-02-21T14:08:00Z"}
{"fullName":"Lisbeth Wampler","ticketNo":1762355854464,"bagArrivalDate":"2019-02-10T10:01:00Z"}
Expressões de Transformação de Sequência
Uma expressão de transformação de sequência transforma uma sequência em outra. Sintaticamente, parece uma função cujo nome é seq_transform. O primeiro argumento é uma expressão que gera a sequência a ser transformada (a sequência de entrada) e o segundo argumento é uma expressão "mapper" que é calculada para cada item da sequência de entrada. O resultado da expressão seq_transform é a concatenação de sequências produzidas por cada avaliação da expressão do mapeador. A expressão do mapeador pode acessar o item de entrada atual por meio da variável $.
Exemplo: para cada ticketNo, extraia uma matriz simples contendo todas as ações executadas na bagagem dessa ticketNo.
SELECT seq_transform(l.bagInfo[],
seq_transform(
$sq1.flightLegs[],
seq_transform(
$sq2.actions[],
{
"at" : $sq3.actionAt,
"action" : $sq3.actionCode,
"flightNo" : $sq2.flightNo,
"tagNum" : $sq1.tagNum
}
)
)
) AS actions
FROM baggageInfo l WHERE ticketNo=1762340683564
Explicação: Você pode usar a expressão de transformação de sequência para transformar documentos JSON armazenados em linhas de tabela. Nesses casos, geralmente você usa várias expressões de transformação de sequência aninhadas entre si. Aqui a expressão do mapeador de uma transformação de sequência interna pode precisar acessar o item atual de uma transformação de sequência externa. Para permitir isso, cada expressão de transformação de sequência 'S' declara uma variável com o nome $sqN, em que N é o nível de aninhamento da expressão S dentro das expressões de transformação de sequência externa. $sqN é basicamente um sinônimo para $, ou seja, é vinculado aos itens retornados pela expressão de entrada S. No entanto, $sqN pode ser acessado por outras expressões de transformação de sequência que podem ser aninhadas dentro da expressão S.
Saída:
{
"actions":[
{"action":"ONLOAD to HKG","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
{"action":"BagTag Scan at YYZ","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
{"action":"Checkin at YYZ","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
{"action":"Offload to Carousel at BLR","at":"BLR","flightNo":"BM115","tagNum":"17657806299833"},
{"action":"ONLOAD to BLR","at":"HKG","flightNo":"BM115","tagNum":"17657806299833"},
{"action":"OFFLOAD from HKG","at":"HKG","flightNo":"BM115","tagNum":"17657806299833"}
]
}
Exemplos de Expressão SQL usando a API QueryRequest
Você pode usar a API QueryRequest e filtrar dados de uma tabela NoSQL usando Expressões SQL.
Para executar sua consulta, use a API NoSQLHandle.query().
Faça download do código completo SQLExpressions.java nos exemplos aqui.
//Fetch rows from the table
private static void fetchRows(NoSQLHandle handle,String sqlstmt) throws Exception {
try (
QueryRequest queryRequest = new QueryRequest().setStatement(sqlstmt);
QueryIterableResult results = handle.queryIterable(queryRequest)){
for (MapValue res : results) {
System.out.println("\t" + res);
}
}
}
String paran_expr="SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing, "+
"bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag WHERE "+
"bag.bagInfo.flightLegs[].fltRouteSrc=any \"SFO\" AND "+
"(bag.bagInfo[].flightLegs[].fltRouteDest=any \"ATH\" OR "+
"bag.bagInfo[].flightLegs[].fltRouteDest=any \"JTR\" )";
System.out.println("Using Paranthesized expression ");
fetchRows(handle,paran_expr);
String case_expr="SELECT fullName,"+
"CASE WHEN NOT exists bag.bagInfo.flightLegs[0] "+
"THEN \"you have no bag info\" "+
"WHEN NOT exists bag.bagInfo.flightLegs[1] "+
"THEN \"you have one hop\" "+
"WHEN NOT exists bag.bagInfo.flightLegs[2] "+
"THEN \"you have two hops.\" "+
"ELSE \"you have three hops.\" "+
"END AS NUMBER_HOPS "+
"FROM BaggageInfo bag WHERE ticketNo=1762341772625";
System.out.println("Using Case Expression ");
fetchRows(handle,case_expr);
String seq_trn_expr="SELECT seq_transform(l.bagInfo[],"+
"seq_transform("+
"$sq1.flightLegs[],"+
"seq_transform("+
"$sq2.actions[],"+
"{"+
"\"at\" : $sq3.actionAt,"+
"\"action\" : $sq3.actionCode,"+
"\"flightNo\" : $sq2.flightNo,"+
"\"tagNum\" : $sq1.tagNum"+
"}"+
")"+
")"+
") AS actions FROM baggageInfo l WHERE ticketNo=1762376407826";
System.out.println("Using Sequence Transform Expressions ");
fetchRows(handle,seq_trn_expr);
Para executar sua consulta, use o método borneo.NoSQLHandle.query().
Faça download do código completo SQLExpressions.py nos exemplos aqui.
# Fetch data from the table
def fetch_data(handle,sqlstmt):
request = QueryRequest().set_statement(sqlstmt)
print('Query results for: ' + sqlstmt)
result = handle.query(request)
for r in result.get_results():
print('\t' + str(r))
paran_expr = '''SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )'''
print('Using Paranthesized expression:')
fetch_data(handle,paran_expr)
case_expr = '''SELECT fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN "you have no bag info"
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN "you have one hop"
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN "you have two hops."
ELSE "you have three hops."
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762341772625'''
print('Using Case Expression:')
fetch_data(handle,case_expr)
seq_trn_expr = '''SELECT seq_transform(l.bagInfo[],
seq_transform(
$sq1.flightLegs[],
seq_transform(
$sq2.actions[],
{
"at" : $sq3.actionAt,
"action" : $sq3.actionCode,
"flightNo" : $sq2.flightNo,
"tagNum" : $sq1.tagNum
}
)
)
) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826'''
print('Using Sequence Transform Expressions:')
fetch_data(handle,seq_trn_expr)
Para executar uma consulta, use a função Client.Query.
Faça download do código completo SQLExpressions.go nos exemplos aqui.
//fetch data from the table
func fetchData(client *nosqldb.Client, err error, tableName string, querystmt string)(){
prepReq := &nosqldb.PrepareRequest{
Statement: querystmt,
}
prepRes, err := client.Prepare(prepReq)
if err != nil {
fmt.Printf("Prepare failed: %v\n", err)
return
}
queryReq := &nosqldb.QueryRequest{
PreparedStatement: &prepRes.PreparedStatement, }
var results []*types.MapValue
for {
queryRes, err := client.Query(queryReq)
if err != nil {
fmt.Printf("Query failed: %v\n", err)
return
}
res, err := queryRes.GetResults()
if err != nil {
fmt.Printf("GetResults() failed: %v\n", err)
return
}
results = append(results, res...)
if queryReq.IsDone() {
break
}
}
for i, r := range results {
fmt.Printf("\t%d: %s\n", i+1, jsonutil.AsJSON(r.Map()))
}
}
paran_expr := `SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )`
fmt.Printf("Using Paranthesized expression:\n")
fetchData(client, err,tableName,paran_expr)
case_expr := `SELECT fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN "you have no bag info"
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN "you have one hop"
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN "you have two hops."
ELSE "you have three hops."
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762341772625`
fmt.Printf("Using Case Expression:\n")
fetchData(client, err,tableName,case_expr)
seq_trn_expr := `SELECT seq_transform(l.bagInfo[],
seq_transform(
$sq1.flightLegs[],
seq_transform(
$sq2.actions[],
{
"at" : $sq3.actionAt,
"action" : $sq3.actionCode,
"flightNo" : $sq2.flightNo,
"tagNum" : $sq1.tagNum
}
)
)
) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826`
fmt.Printf("Using Sequence Transform Expressions:\n")
fetchData(client, err,tableName,seq_trn_expr)
Para executar uma consulta, use o método query.
JavaScript: Faça download do código completo SQLExpressions.js nos exemplos aqui.
//fetches data from the table
async function fetchData(handle,querystmt) {
const opt = {};
try {
do {
const result = await handle.query(querystmt, opt);
for(let row of result.rows) {
console.log(' %O', row);
}
opt.continuationKey = result.continuationKey;
} while(opt.continuationKey);
} catch(error) {
console.error(' Error: ' + error.message);
}
}
TypeScript: Faça download do código completo SQLExpressions.ts nos exemplos aqui.
interface StreamInt {
acct_Id: Integer;
profile_name: String;
account_expiry: TIMESTAMP;
acct_data: JSON;
}
/* fetches data from the table */
async function fetchData(handle: NoSQLClient,querystmt: any) {
const opt = {};
try {
do {
const result = await handle.query<StreamInt>(querystmt, opt);
for(let row of result.rows) {
console.log(' %O', row);
}
opt.continuationKey = result.continuationKey;
} while(opt.continuationKey);
} catch(error) {
console.error(' Error: ' + error.message);
}
}
const paran_expr = `SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )`
console.log("Using Paranthesized expression");
await fetchData(handle,paran_expr);
const case_expr = `SELECT fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN "you have no bag info"
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN "you have one hop"
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN "you have two hops."
ELSE "you have three hops."
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762341772625`
console.log("Using Case Expression");
await fetchData(handle,case_expr);
const seq_trn_expr = `SELECT seq_transform(l.bagInfo[],
seq_transform(
$sq1.flightLegs[],
seq_transform(
$sq2.actions[],
{
"at" : $sq3.actionAt,
"action" : $sq3.actionCode,
"flightNo" : $sq2.flightNo,
"tagNum" : $sq1.tagNum
}
)
)
) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826`
console.log("Using Sequence Transform Expressions");
await fetchData(handle,seq_trn_expr);
Para executar uma consulta, você pode chamar o método QueryAsync ou chamar o método GetQueryAsyncEnumerable e iterar sobre o enumerável assíncrono resultante.
Faça download do código completo SQLExpressions.cs nos exemplos aqui.
private static async Task fetchData(NoSQLClient client,String querystmt){
var queryEnumerable = client.GetQueryAsyncEnumerable(querystmt);
await DoQuery(queryEnumerable);
}
private static async Task DoQuery(IAsyncEnumerable<QueryResult<RecordValue>> queryEnumerable){
Console.WriteLine(" Query results:");
await foreach (var result in queryEnumerable) {
foreach (var row in result.Rows)
{
Console.WriteLine();
Console.WriteLine(row.ToJsonString());
}
}
}
private const string paran_expr =@"SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any ""SFO"" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any ""ATH"" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any ""JTR"" )";
Console.WriteLine("\nUsing Paranthesized expression:!");
await fetchData(client,paran_expr);
private const string case_expr =@"SELECT fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN ""you have no bag info""
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN ""you have one hop""
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN ""you have two hops.""
ELSE ""you have three hops.""
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762341772625";
Console.WriteLine("\nUsing Case Expression!");
await fetchData(client,case_expr);
private const string seq_trn_expr =@"SELECT seq_transform(l.bagInfo[],
seq_transform(
$sq1.flightLegs[],
seq_transform(
$sq2.actions[],
{
""at"" : $sq3.actionAt,
""action"" : $sq3.actionCode,
""flightNo"" : $sq2.flightNo,
""tagNum"" : $sq1.tagNum
}
)
)
) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826" ;
Console.WriteLine("\nUsing Sequence Transform Expressions!");
await fetchData(client,seq_trn_expr);