query con condizioni multiple: in progress

This commit is contained in:
cesare 2025-02-13 18:01:07 +01:00
parent 0616f8af26
commit e6e52c4243
4 changed files with 2451 additions and 50 deletions

View File

@ -39,7 +39,7 @@
<script type="module" src="./js/browseMgr_5.1.js"></script>
<script type="text/javascript" src="./js/minimap_4.3.js"></script>
<script type="text/javascript" src="./js/partext.js"></script>
<script type="text/javascript" src="./js/utilsMgr_5.0.js"></script>
<script type="text/javascript" src="./js/utilsMgr_5.1.js"></script>
<script type="text/javascript" src="./js/citazionijson.js"></script>
<script type="module" src="./js/script_5.1.js"></script>
<script type="text/javascript" src="./js/sparqltemplates.js"></script>

View File

@ -1,7 +1,7 @@
/**
*
*/
import { getVersiConCitazioni, queryRiferimenti, getListaRis, cleanListaRis, getFormaCntxt, getListaIdCommenti} from './dataMgr_5.0.js';
import { getVersiConCitazioni, queryRiferimenti, getListaRis, cleanListaRis, getFormaCntxt, getListaIdCommenti, queryRiferimentimul} from './dataMgr_5.1.js';
import { getJsonQuery, emptyStructCard } from './script_5.1.js';
import {resetGraphStr} from './syntgraph_5.1.js'
@ -1509,7 +1509,14 @@ $(document).ready(function() {
else
unitaRicerca = jsonQuery['unitaRicerca']
if (unitaRicerca=='riferimenti'){
listaRisultatiCommenti=queryRiferimenti(jsonQuery.Riferimento100, cantoDisplayed)
var esprLR=jsonQuery.EsprLogicaRif
if(esprLR.length && esprLR.length==1){
listaRisultatiCommenti=queryRiferimenti(jsonQuery[esprLR[0].trim()], cantoDisplayed)
return
}
else{
listaRisultatiCommenti=queryRiferimentimul(jsonQuery, cantoDisplayed)
}
return
}
console.log("got json query, unita ricerca: " + unitaRicerca)

View File

@ -147,6 +147,191 @@ export async function getVersiConCitazioni(canticapar = '', cantopar = '') {
return result4
}
function getWhere(filtro) {
if (filtro == null) {
return
}
var queryfi = ''
console.log(filtro)
var contenuti_riferimento = {
'personaggio': " and CPER !='' and CPER !='no'",
'episodio': " and CEP !='' and CEP !='no'",
'motivo': " and CMO !='' and CMO !='no'",
'immagine': " and CIM !='' and CIM !='no'",
'teoria': " and CTE !='' and CTE !='no'",
'stilema': " and CST !='' and CST !='no'",
'topografia': " and CTO !='' and CTO !='no'"
}
var tmpfiltro = ''
queryfi = ' '
if (filtro.Commentatore != null && filtro.Commentatore.trim() != 'all') {
tmpfiltro = filtro.Commentatore.trim()
tmpfiltro = tmpfiltro.replace("\'", "_")
queryfi += "Com like'" + tmpfiltro + "'"
}
else
queryfi += "Com like '%'"
if (filtro.Autore_Fonte != null && filtro.Autore_Fonte.trim() != 'all') {
tmpfiltro = filtro.Autore_Fonte
tmpfiltro = tmpfiltro.replace("\'", "_")
//console.log(tmpfiltro)
queryfi += " and Aut like '" + tmpfiltro.trim() + "'"
}
if (filtro.Fonte != null && filtro.Fonte.trim() != 'all')
queryfi += " and TiFo='" + filtro.Fonte.trim() + "'"
if (filtro.Area_Tematica != null && filtro.Area_Tematica.trim() != 'all')
queryfi += " and CA='" + filtro.Area_Tematica.trim() + "'"
if (filtro.Tipo_Riferimento != null && filtro.Tipo_Riferimento.trim() != 'all')
queryfi += " and NaRi='" + filtro.Tipo_Riferimento.trim().toUpperCase() + "'"
if (filtro.Contenuto_Riferimento != null && filtro.Contenuto_Riferimento != 'all')
queryfi += contenuti_riferimento[filtro.Contenuto_Riferimento.trim()]
if (filtro.Rapporto_Testo_Fonte != null && filtro.Rapporto_Testo_Fonte != 'all')
queryfi += " and UPPER(RSO)=UPPER('" + filtro.Rapporto_Testo_Fonte.trim() + "')"
if (filtro.Testo_Fonte != null && filtro.Testo_Fonte.trim() != '')
queryfi += " and TF like '%" + filtro.Testo_Fonte.trim() + "%'"
if (filtro.Testo_Nota != null && filtro.Testo_Nota.trim() != '')
queryfi += " and Ann like '%" + filtro.Testo_Nota.trim() + "%'"
if (filtro.contesto != null) {
var marray = JSON.parse(filtro.contesto);
var infiltro = false
var oplog = ' and ('
var tfi = filtroContesto(marray[0], 'Inferno', oplog)
queryfi += tfi
if (tfi.trim() != '')
infiltro = true
oplog = ' or '
tfi = ''
tfi = filtroContesto(marray[1], 'Purgatorio', oplog)
if (tfi != '') {
infiltro = true
queryfi += tfi
oplog = ' or '
}
tfi = ''
tfi = filtroContesto(marray[2], 'Paradiso', oplog)
if (tfi != '') {
infiltro = true
queryfi += tfi
}
if (infiltro)
queryfi += ")"
}
return (queryfi)
}
var tmpc = ''
function getWherePart(iclause, query, cls) {
console.log(cls)
for (var filt in iclause) {
if ('TERM' in iclause[filt]) {
var rifterm = iclause[filt]['TERM']
console.log(getWhere(query[rifterm]))
/*tmpc += '('+getWhere(query[rifterm])*/
console.log(parseInt(filt) + 1)
if (parseInt(filt) == 0) {
tmpc += '(' + getWhere(query[rifterm])
tmpc += ') '
}
else {
tmpc += cls + ' (' + getWhere(query[rifterm])
tmpc += ') '
}
}
else {
var myop = Object.keys(iclause[filt])[0];
if (parseInt(filt) > 0)
tmpc += ' ' + cls
getWherePart(iclause[filt][myop], query, myop)
}
}
//tmpc+=')'
return tmpc
}
export async function queryRiferimentimul(query, cid) {
var wherecl = ' where '
var parser = peg.generate(hdnriferquerygrammar);
var test = query['EsprLogicaRif'].join(" ");
test = test.replaceAll("( ", "(")
test = test.replaceAll(" )", ")")
var rifclauses = parser.parse(test);
var jsonclauses = JSON.parse(rifclauses)
tmpc = ''
for (var cls in jsonclauses) {
wherecl += '('+getWherePart(jsonclauses[cls], query, cls)+')'
}
console.log(wherecl)
const tconn = await db.connect();
var querytl = 'select IdRiferimento, Cantica, Canto, Verso from riferimenti'
var rs = await tconn.query(querytl + wherecl)
var result4 = rs.toArray().map((row) => row.toJSON());
await tconn.close();
var resxcantica = Object.groupBy(result4, ({ Cantica }) => Cantica);
console.log(resxcantica)
showResult(resxcantica, cid)
}
function showResult(resxcantica, cid) {
listaidversi = []
var numcid = cid.split('_')[1]
for (var cantica in resxcantica) {
var $nctags = $(' .navig-canto')
console.log(resxcantica[cantica].length)
var i = 1;
if (cantica == 'Purgatorio')
i = 2
if (cantica == 'Paradiso')
i = 3
var spanbadgecantica = $('<span />');
spanbadgecantica.attr('class', 'badge badge-warning badge-pill mx-2');
spanbadgecantica.append(resxcantica[cantica].length)
spanbadgecantica.appendTo($('#cantica' + i + '-badge'))
var tmp = resxcantica[cantica]
var resxcanto = Object.groupBy(tmp, ({ Canto }) => Canto);
for (var canto in resxcanto) {
var tmpv = resxcanto[canto]
var spanbadge = $('<span />');
spanbadge.attr('class', cantobadgeclassBis);
spanbadge.append(resxcanto[canto].length)
if (canto.startsWith('0')) {
canto = canto.replace('0', '')
}
spanbadge.appendTo($nctags.filter('[name="' + cantica + 'Canto ' + canto + '"]'))
for (const tmpvi of tmpv) {
let myveid = '#' + cantica + '_Canto_' + canto + '_' + tmpvi.Verso.split('-')[0]
//console.log(myveid)
listaidversi.push(myveid)
listaidcommenti.push(tmpvi.IdRiferimento)
if (cid.includes(cantica) && numcid == canto)
$(myveid).addClass("mark ")
}
}
drawMinimap(cid, true)
}
/*console.log(resxcantica)*/
return listaidversi
}
export async function queryRiferimenti(filtro, cid) {
if (filtro == null) {
return

2209
js/utilsMgr_5.1.js Normal file

File diff suppressed because it is too large Load Diff