[botta&risposta] GMSDB - Game Maker Simple Database

Gex, Dll, DyLib, Js e ogni tipo di estensione per GameMaker
Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Le vecchie FUNZIONI di php per mysql sono depre ate, devi usare quelle nuove. non mysql stesso...

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da BaronVsCorsar »

già il fatto che sqlite NON usi un server fa capire che NON è intercambiabile con <nome_di_database_con_struttura_client_server_a_scelta_del_lettore> in quanto soluzione tecnica differente (adatta per problematiche differenti).
Indubbiamente tante pagine in php che utilizzavano mySQL (unica soluzione fino alla versione 4... o 3 non ricordo) potrebbero passare a sqlite (ora disponibile integrato nel php).

da quello che ho letto di noSQL sul link che hai postato sembra abbia anch'essi scopi differenti da mysql/sqlite (in particolare perchè non si preoccupa di essere ACID, scopo principale e primo dei database relazionali).
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Qualcuno potrebbe provare l'esempio su GM:Studio? Su gmc mi segnalano che non funziona

Avatar utente
NeatWolf
Membro super
Messaggi: 684
Iscritto il: 03/08/2011, 12:09
Specialità: Programmazione
Località: Oristano, Sardegna, Italia
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da NeatWolf »

Homunculus ha scritto:Qualcuno potrebbe provare l'esempio su GM:Studio? Su gmc mi segnalano che non funziona
Volevo prendermi un po' di tempo per studiarmi meglio il topic e gli script e dare un parere più generale, visto che sicuramente è un lavoro certosino da guardare con calma, ma ho fatto comunque una piccola prova veloce.

Effettivamente in HTML5 freeza nel momento del refresh della tabella, mentre le operazioni di sort sembrano raggruppare per campi come se fosse stata effettuata una SELECT DISTINCT <nomecampo>.
Inoltre in html5 gli id sembrano scritti in binario :protect:

Appena potrò darò un'occhiata più nel dettaglio del codice, in effetti ha un comportamento piuttosto anomalo. Nessun errore di compilazione, quindi probabilmente qualcosa è stata implementata in maniera diversa.

O magari è stata implementata male in GM:Studio, tutto può essere... il porting del codice non è mai garantito (c'è tanto di warning a scritte rosse quando lo si fa) e sicuramente non è causa della versione 8.1 attuale
Info: Immagine FB | G+ | A.D.O.N. Project | Videos:YT

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Riesumo il topic perché ho aggiornato tutto il sistema di database, e aggiunto un sacco di funzionalità! Eccovi una lista:
  • Compatibile con GM:Studio
  • Migliorate le prestazioni delle query
  • Rimosse diverse funzionalità inutili o obsolete causa nuove funzioni più performanti
  • Manuale dettagliato allegato, e una migliore descrizione negli scripts
  • È ora possibile ritornare direttamente delle colonne selezionate, e non solo gli id dei record (in pratica, ho introdotto il select)
  • Non c'é più nessun limite al numero di colonne nelle tabelle
  • Integrazione con CSV: si può esportare le tabelle in CSV e importare dati da file CSV
Unica nota negativa dell'update: non ho nessuna voglia di mantenere una documentazione bilingue, la doc é in inglese. Se avete domande comunque non scappo quindi...

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Riesumo nuovamente causa aggiornamento. Sono stato tartassato su GMC perché sia GEX che scripts danno errori dopo l'aggiornamento alla versione 1.2 di studio.

La nuova versione scaricabile nell'open post corregge due errori con studio 1.2:

- In studio 1.2, non é più possibile ridimensionare le ds_grids a dimensione 0 (nel mio caso si verifica quando non ci sono records). Questo é un cosiddetto "pain in the ass" in un sistema come il mio, per ora ho risolto ricreando la grid (si, ricrearla a dimensione 0 funziona... yoyogames rules).
- Dalla 1.2 non é più possibile utilizzare argumenti scripts misti in caso di scripts con argomenti variabili (o si usa argumentN, o argument[N], entrambi causa un errore). Corretti gli scripts di conseguenza.
- Il sorting dei risultati utilizza ora la nuova funzione ds_grid_sort, questo rende il sorting (in precedenza tutto programmato in GML e quindi estremamente lento) estremamente più performante.

:cappa:

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Sla »

Per il parsing... sicuro di non riuscire semplicemente a lavorare di stringhe per convertire una query sql in codice gml da lanciare con una execute_string al volo?
eppure mi sembra tutto giusto...

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Tizzio »

Sla ha scritto:Per il parsing... sicuro di non riuscire semplicemente a lavorare di stringhe per convertire una query sql in codice gml da lanciare con una execute_string al volo?
execute_string è deprecato da quando è uscito gmstudio

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Sla »

Vero,vero, presto sarà compilato. Dovrei aggiornarmi un po'.
eppure mi sembra tutto giusto...

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Già ora c'è il compiler, ma se lo vuoi devi sborsare 300$.

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Non so quanti stanno usando questa estensione, ma io sto continuando a svilupparla e sono arrivato a un punto morto (causa indecisione), quindi mi affido a voi per venirne fuori.

Il problema é questo: mi hanno chiesto su GMC di aggiungere operazioni sui records come la somma, min, max, ecc... oltre alla possibilità di inserire condizioni un po' più complesse che considerino più di una colonna. È tutto fattibile, ma questo va a peggiorare un problema che già mi da fastidio, ovvero la quantità spropositata di argomenti della funzione db_record_find_values(), che permette di restituire i risultati dal database.

La mia soluzione, ed é su questa che ho qualche dubbio é la seguente: spezzettare la query in più funzioni. Vi propongo un esempio prima / dopo che é sicuramente più semplice da capire rispetto ad una lunga spiegazione:

Prima:

Codice: Seleziona tutto

results = db_record_find_values("fruits","id,name,weight,color",db_op_gte,"weight|100","weight DESC",-1,0);
Dopo:

Codice: Seleziona tutto

q = db_query("fruits");
db_qy_conditions(q,db_op_gte,"weight",100);
db_qy_sort(q,"weight",1);
results = db_query_exec(q);
Sono ovviamente più righe di codice, ma mi pare un sistema molto più pulito. Notare che non c'é bisogno di indicare i valori di ritorno "id,name,weight,color" come nella precedente funzione in quanto se non é specificato, ritorna tutto in automatico.

Si può comunque col secondo metodo fare query in una singola riga nei casi più semplici:

Codice: Seleziona tutto

results = db_query_exec(db_qy_sum(db_query("fruits"),"weight"));
A me la soluzione spezzettata sembra molto più interessante e pulita, soprattutto se si considera che la versione "prima" richiederebbe ancora più parametri in seguito all'estensione delle funzionalità.

Non so però, voi che ne pensate?

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da BaronVsCorsar »

entrambe!
vedi
draw_text
draw_text_ext
draw_text_color
draw_text_ext_color_lupmannar

Non è la stessa situazione (non ti limiti ad aggiungere parametri), ma ti consiglio un metodo
"tutto nei parametri" ed un metodo "più funzioni".
Ogni programmatore utilizzerà il preferito, o a seconda dei casi quello più conveniente.
(e puoi sempre fare in modo che uno si richiami all'altro, se vuoi avere un unico set di script da aggiornare).
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Non so Baron, il tuo esempio col draw mi pare un po' forzato per quello che sto facendo io sinceramente. Comunque é vero, posso sempre creare una cosa tipo db_query_now() che prende un numero spropositato di parametri e via, ma questo non coprirebbe comunque tutti i casi possibili (select, max, min, sum ecc.. sono mutually exclusive) e col draw funziona perché ci sono poche varianti, qui non posso fare db_query_select, db_query_select_conditions, db_query_select_conditions_sort_limit ...

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da BaronVsCorsar »

fai un parametro testuale

"max, blabla, sort, blabla2"

che processi dentro lo script, e poi ti richiami gli script semplici.

se trovi una buona logica sul parametro-stringa, tu ti sbatti a fare il parsing, ma l'utente è avvantaggiato (se viene fuori una cosa mnemonica ovviamente).

my 2 cents: uno script del genere deve andare incontro al più vasto numero di utenti. Vale la pena sbattersi nel parsing per prendere i puristi dell' "unica funzione".
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Jak »

Anche i draw di game maker teoricamente dovrebbero avere svariate decine di combinazioni. Il trucco sta nel farne una manciata in base agli argomenti più usati ed usare nomi come _ext, _general ecc per evitare di allungare eccessivamente il nome della funzione. Se uno ha necessariamente bisogno di una completa flessibilità usa la più adatta o generalizzata e fine. Mi è capitato molto spesso di non avere funzioni draw adatte allo scopo e quindi usare la _ext o altre aggiungendo argomenti fissi inutilmente ma game maker è fatto così e per chi lo usa è sicuramente meglio usare le varie librerie come ha sempre usato tutto il resto.
Da parte tua ovviamente il lavoro sarà minimo, basta richiamare la funzione più generale aggiungendo dei parametri di default.
Homunculus ha scritto:ma questo non coprirebbe comunque tutti i casi possibili (select, max, min, sum ecc.. sono mutually exclusive)
Non conoscendo i database non ho capito molto bene di cosa stai parlando ma tirando ad indovinare... non ti basta usare delle costanti come argomenti delle funzioni? Esattamente come le primitives hanno i loro tipi di primitiva (pr_linelist, pr_trianglestrip, ecc) farai la stessa cosa con le tue funzioni che so he_select, he_max, he_min ( he = "homunculus's enumeration" la prima roba che mi è venuta in mente :lol: )
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Jak purtroppo in questo caso non si può dire "questo parametro é più usato/importante" di quell'altro, tutto varia a seconda delle necessità. Però qualche spunto importante me lo avete dato, al momento propendo per sviluppare un approccio come indicato nell'esempio "dopo", con però alcune funzioni di comodo che raggruppano più parametri (ma che dietro le quinte costruiscono la query con l'approccio descritto prima).

Devo rimuginarci un po' sopra, ma se non altro mi pare di capire che non posso rinunciare alla singola mega funzione.

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Dopo secoli ho finalmente terminato la nuova versione della GEX (download nell'open post). Vista l'entità dei cambiamenti, e visto che il versioning fa figo, si passa dalla versione 1.2.1 alla 2.0.

Le principali modifiche e novità:
  • Il sistema di query é stato completamente riscritto. Abbiamo ora un'entità query vera e propria (un po' come una data structure) per gestire tutte le operazioni sui records e non più semplicemente una chiamata ad una funzione mastodontica. Le query possono ora essere create, distrutte, salvate, modificate ed eseguite più e più volte, applicando filtri, condizioni e altro singolarmente in base alle necessità.
  • Non é più necessario indicare esplicitamente tutte le colonne che vanno ritornate dalla query SELECT in caso si voglia estrapolare l'intero set di colonne, basta lasciare il campo vuoto (insomma, come fare SELECT * in mysql)
  • Le funzioni di update e delete ora funzionano col sistema di query. Questo significa che non é più necessario indicare ogni volta l'id o gli id da cancellare/modificare, si crea una query di update/delete e si applicano dei filtri e dei limiti ai record che devono essere considerati (in sostanza, si può modificare/cancellare in massa in base a dei filtri)
  • I filtri ora permettono di indicare più di una colonna a cui applicare le condizioni. Si può quindi confrontare anche più colonne tra di loro per filtrare i risultati.
  • Inserita la funzionalità JOIN. Si tratta di una funzione sicuramente nota a chi usa SQL, che permette di "unire" i risultati di più tabelle in modo logico. Si tratta ovviamente di un join di base, non é minimamente paragonabile al suo analogo SQL, ma fa il suo lavoro.
Veloce esempio del nuovo sistema di query:

Codice: Seleziona tutto

//esempio SELECT
var query = db_query_select("oggetti","id,nome,tipo,peso,colore"); //Crea una query sul database oggetti per estrapolare id,nome, tipo, peso e colore
db_cl_where(query,db_op_eq,"tipo,colore","spada,argento"); //Applica un filtro alla query che seleziona solo le spade di colore argento
db_cl_sort(query,"peso","DESC"); //Indica che la query deve ritornare i risultati ordinati per peso, decrescente.
db_cl_limit(query,3,0); //Limita i risultati ai primi 3 (le tre spade d'argento più pesanti quindi)
spade_pesanti = db_query_exec(query,true); //Esegue la query e restituisce il risultato. Il secondo argomento indica che la query non va distrutta (la riutilizziamo sotto)

db_cl_sort(query,"peso","ASC"); //Applica (e sovrascrive) l'ordinamento della precedente query, indicando di ordinare ora in modo crescente, sempre per peso.
spade_leggere = db_query_exec(query); //Esegue di nuovo la query (con il nuovo ordinamento), e ritorna quindi le 3 spade d'argento più leggere

Codice: Seleziona tutto

//esempio DELETE
var query = db_query_delete("oggetti"); //Creiamo una query di cancellazione
db_cl_only(query,"1,14,49"); //Indichiamo che vogliamo cancellare solo gli oggetti con id 1,14 e 49
db_cl_sort(query,"peso","DESC"); //Ordiniamo per la cancellazione i risultati per peso (utile solo se usato con una funzione di limit, come segue)
db_cl_limit(query,1,0); //Limita la cancellazione solo al primo record.
numero_oggetti_cancellati = db_query_exec(query); //Esegue la query. Riassumento questa query cancella il singolo oggetto più pesante presente nel database, tra i tre oggetti aventi id 1, 14 e 49.
Piccola nota: nonostante i post precedenti ho deciso di non includere funzionalità di calcolo. Mi sono reso conto che non avrebbe senso vosto che ritorno i risultati delle query sotto forma di ds_grid, se si ha quindi bisogno di una somma o altro dei risultati è sicueramente più semplice usare le funzioni delle ds_grid direttamente

:cappa:

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Tizzio »

ah, tanto ti toccherà ri-scriverla di nuovo quando uscirà la 1.3 coi ds accessors (che ti risparmieranno non poche chiamate a funzione) :asd:
Comunque ottimo, diventa sempre più appetibile

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Homunculus »

Tizzio ha scritto:ah, tanto ti toccherà ri-scriverla di nuovo quando uscirà la 1.3 coi ds accessors (che ti risparmieranno non poche chiamate a funzione) :asd:
Comunque ottimo, diventa sempre più appetibile
Ci ho pensato, ma non é che le vecchie chiamate diventano obsolete... Posso modificare gli accessors man mano che aggiorno la gex nel tempo

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [botta&risposta] GMSDB - Game Maker Simple Database

Messaggio da Tizzio »

Homunculus ha scritto:
Tizzio ha scritto:ah, tanto ti toccherà ri-scriverla di nuovo quando uscirà la 1.3 coi ds accessors (che ti risparmieranno non poche chiamate a funzione) :asd:
Comunque ottimo, diventa sempre più appetibile
Ci ho pensato, ma non é che le vecchie chiamate diventano obsolete... Posso modificare gli accessors man mano che aggiorno la gex nel tempo
Esatto, intendevo che "devi" perché è più veloce :)

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti