JQMGenerator = new Blockly.Generator( "CafeSQL" ) ; CafeGenerator = JQMGenerator VALUE = "input_value" STATEMENT = "input_statement" FIELDINPUT = "field_input" FIELDDROPDOWN = "field_dropdown" Agregar( "TTexto", "Texto {DContenido|field_input}", {salida: true, color: "240"}, ["'{DContenido}'", 0] ) Agregar( "TCampo", 'Campo {DContenido|field_variable|{"variableTypes":["EsCampo"],"defaultType":"EsCampo","variable":"CCampo1"}',{salida:"Campo",color:"green"},["`{DContenido}`",0] ) Agregar( "TTabla", 'tabla {DContenido|field_variable|{"variableTypes":["EsTabla","Tabla"],"defaultType":"EsTabla","variable":"TTabla1"}', {salida:"Tabla",color:"green"},["`{DContenido}`",0] ) Agregar( "TUrl", "URL {DContenido|field_input}", {salida: true, color: "240"}, ["{DContenido}", 0] ) Agregar("TNumero", 'Núm {DContenido|field_input}', {salida:true,color:"blue"}, ["{Number([DContenido])}",0]) Agregar("TFecha", 'Fecha {Año|field_number|{"min":"1900","max":"2100", "value":"'+((new Date()).getFullYear())+'"}{Mes|field_dropdown|{"options":'+(function(){ return JSON.stringify("ENE0FEB0MAR0ABR0MAY0JUN0JUL0AGO0SEP0OCT0NOV0DIC".split(0).map(function(n,i){return [n, i+""]})) })()+'}{Día|field_number|{"value":"1","min":"1","max":"31"}', {salida:true, color:"green"}, function(D){ D.Mes++ ; if( D["Mes"]<10 ) D["Mes"] = "0"+D["Mes"] ; if( D["Día"]<10 ) D["Día"] = "0"+D["Día"] ; podriaSerBisiesto = D["Año"] % 4 == 0 ; noPuedeSerBisiesto = D["Año"] % 100 == 0 ; maxDiaFebrero = 28 if( podriaSerBisiesto && !noPuedeSerBisiesto ) maxDiaFebrero++ ; if( D.Mes == 2 ) if( D["Día"] > maxDiaFebrero ) D["Día"] = maxDiaFebrero ; return '"{Año}-{Mes}-{Día}"'.procesar(D) ; }) Agregar( 'TCampoTabla' , 'campo {DSubCampo|field_variable|{"variableTypes":["EsCampo"],"defaultType":"EsCampo","variable":"CCampo1"} de la tabla {DTabla|field_variable|{"variableTypes":["EsTabla"],"defaultType":"EsTabla","variable":"TTabla1"}' , { salida: true, color: "green" } , ['`{DTabla}`.`{DSubCampo}`',0] ) //------------------------------------------------ NUEVAS HABILIDADES Agregar( 'TDescargar' , 'Descargar en var. {DVariable|input_value|{"check":"PHPVariable"} desde la url {DUrl|input_value|{"check":"URL"}' , { esStatement: true, color: "#770055" } , '{DVariable} = file_get_contents( "{DUrl}" ) ;\n' ) Agregar( 'TParam' , 'param {DParam|field_variable|{"variable":"Cambia mi nombre"}' , { salida: "Parametro", color: "#007722" } , ['${DParam}',0] ) Agregar( 'TFiltrar' , 'Filtrar variable {DVariable|input_value|{"check":"PHPVariable"} param {DParam|' ) Agregar( 'TTSV' , 'Abrir CSV {DArchivo|field_input|{"text":"miarchivo.tsv"} separador {DSep|field_dropdown|{"options":[ ["Coma ,", ","],["Punto y coma", ";"], ["Tabulado", "\\t"] ]}' , { esStatement: true, color: "#007722" } , function(D){return ` // Abrir archivo TSV ${D.DArchivo} if( true) { $separador = "${D.DSep}" ; $archivo = file_get_contents( "${D.DArchivo}" ) ; $renglones = explode( "\\n", $archivo ) ; if( count($renglones)>1 ) { $tit = explode( $separador, $renglones[0] ) ; $lista = [] ; for( $i = 1 ; $i < count($renglones) ; $i = $i+1 ) { $conjunto = [] ; $extraido = explode( $separador, $renglones[$i] ) ; foreach( $tit as $clave=>$titulo ) { $conjunto[trim($titulo)] = trim( $extraido[$clave] ) ; } $lista[] = (object)$conjunto ; } $resultado = $lista ; } else $resultado = [] ; } else $resultado = [] ; `} ) //------------------------------------------------ CREATE TABLE Agregar( 'TCrearTabla' , 'CREATE TABLE {DNombre|field_variable|{"variableTypes":["EsTabla","Tabla"],"defaultType":"EsTabla","variable":"TTabla1"}}{D|input_dummy}¿IF NOT EXISTS? {DSiExiste|field_checkbox}{D|input_dummy}{DCampos|input_statement}' , { salida: true, color: "#955500" } , function(D){ return [('CREATE TABLE '+((D.DSiExiste=="TRUE"&&'IF NOT EXISTS')||"")+' `{DNombre}` (\n').procesar(D)+D.DCampos.replace(",","")+');\n',0] } ) Agregar( 'TCampoNuevo' , 'Agregando {A|input_dummy}campo {DCampo|input_value|{"check":"Campo"} del tipo {DTipo|input_value|{"check":"Definicion"} características... {DAdicional|input_value}' , { esStatement: true, color: "#957700" } , function(D){ if( D.DTipo.indexOf("BOOLEAN") > -1 ) D.DAdicional = D.DAdicional.replace( /DEFAULT\s\'(.*?)\'/, function(a,b){ return "DEFAULT "+b } ) ; return ', {DCampo} {DTipo} {DAdicional}\n'.procesar(D) } ) Agregar( 'TAutoIncremental' , 'AUTOINCREMENT' , { salida: true, color: "black" } , [ ' AUTOINCREMENT', 0 ] ) Agregar( 'TNumericoEntero' , 'INTEGER max cifras{DMax|field_number}' , { salida: "Definicion", color: "#953300" } , function(D){ return [' INTEGER'+(!D.DMax?"":"({DMax})".procesar(D)),0] } ) Agregar( 'TNumericoDecimales' , 'REAL max cifras {DMax|field_number} max cifras dec {DMaxDec|field_number}' , { salida: "Definicion", color: "#953300" } , function(D) { return [ ' FLOAT'+( D.DMax ? "({DMax}, {[DMaxDec]||2})".procesar(D):"" ) ,0] } ) Agregar( 'TVarChar' , 'VARCHAR({DMax|field_number|{"value":"40"})' , { salida: "Definicion", color: "#959900" } , function(D) { return [' VARCHAR({[DMax]||50})'.procesar(D),0] } ) Agregar( 'TNotNull' , 'NOT NULL{DOtro|input_value}' , { salida: true, color: "black" } , [ ' NOT NULL{DOtro}',0 ] ) Agregar( 'TPrimaryKeyInline' , 'PRIMARY KEY{DOtro|input_value}' , { salida: true, color: "black" } , [ ' PRIMARY KEY {DOtro}',0 ] ) Agregar( 'TFecha' , 'DATETIME' , { salida: "Definicion", color: "#959900" } , [ ' DATE', 0 ] ) Agregar( 'TMarcaDeTiempo' , 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP' , { salida: "Definicion", color: "#959900" } , [ ' TIMESTAMP DEFAULT CURRENT_TIMESTAMP',0 ] ) Agregar( 'TDefault' , "DEFAULT '{DValor|field_input}'{DOtro|input_value}" , { salida: true, color: "black" } , [ ' DEFAULT \'{DValor}\' {DOtro}',0 ] ) Agregar( 'TBooleano' , 'BOOLEAN' , { salida: true, color: "#959900" } , [ ' BOOLEAN', 0 ] ) // ------------------------------------------------ INSERT INTO Agregar( 'TEjecutar' , 'Ejecutar sentencia SQL {DSentencia|input_value} Si OK {DOk|input_value} Si NO {DNo|input_value}' , { esStatement: true, color: "#770055", renglones: 2 } , ` $conexion = conectar() ; $resultado = $conexion->query( "{DSentencia}" ); if( $resultado ) print "{DOk}" ; else print "{DNo}" ; ` ) Agregar( 'TInsertar' , 'INSERT INTO {B|input_dummy}tabla {DTabla|input_value|{"check":"Tabla"}' + '({DCampos|input_value|{"check":"OrdenInsertar"})' + 'VALUES {DValoresNuevos|input_value}' , { salida: true, siguiente: "ModoInsertar", color: "#AADD00" } , function(D){return[`INSERT INTO ${D.DTabla}\n${D.DCampos}\n${D.DValoresNuevos.trim()}`,0]}//({DCampos})\nVALUES] ) Agregar( 'TListaValores' , 'comenzando con... {B|input_dummy}{DLista|input_statement}' , { salida: true, color: "#AADD00" } , ['VALUES\n (\n{DLista}\n)',0] ) Agregar( 'TInsertarOrden' , 'los campos {ENTER|input_dummy}{DCampos|input_statement}' , { salida: "OrdenInsertar", color: "#AADD00" } , ['({[DCampos].slice(0,-1)}) \n',0] ) Agregar( 'TInsertarValores' , 'conjunto valores {BR|input_dummy}{DLista|input_statement|{"check":"Valores"}' , { salida: true, color: "#AADD00" } , ['({[DLista].slice(0,-1)}),\n',0] ) Agregar( 'TValores' , 'valor {DValor|field_input|{"text":"abc"}' , { anterior: "Valores", siguiente: "Valores", color: "#88BB00" } , "'{DValor}'," ) Agregar( 'TValores2' , 'valor {DValor|input_value|{"text":"abc"}' , { anterior: "Valores", siguiente: "Valores", color: "#88BB00" } , "'{DValor}'," ) //------------------------------------------------ SELECT FROM Agregar( "TSelect" , 'SELECT campos {DCampos|input_statement} FROM tabla {DTabla|input_value|{"check":"Tabla"}' , {salida: "SelectSQL", siguiente: true,renglones:2, color: "red"} , function(E){E.DCampos = E.DCampos.slice(0,-1);return ["SELECT\n{DCampos}\nFROM\n{DTabla}\n".procesar(E),0]} ) Agregar( "TFin", "ningun/a más", {anterior:true, color: "black"}, ";\n" ) Agregar( "TTodos" , "* todos los campos" , {anterior:true, color: "red"} , "* " ) Agregar( "TCampoSinAlias" , 'campo {DCampo|field_variable|{"variableTypes":["EsCampo"],"defaultType":"EsCampo","variable":"CCampo1"}' , {esStatement:true, color: "red"} , "`{DCampo}`," ) Agregar( "TCampoConAlias", 'campo {DCampo|field_variable|{"variableTypes":["EsCampo"],"defaultType":"EsCampo","variable":"CCampo1"} ALIAS {DAlias|field_input|{"text":"CAlias1"}' , {esStatement:true, color: "red"} , "`{DCampo}` `{DAlias}`," ) Agregar( "TConcatenar" , 'CONCAT_WS {D|input_dummy}Junta {DJuntador|field_input}{DCampos|input_statement} alias {DAlias|input_value}' , {esStatement: true, color: "red"} , "CONCAT_WS( '{DJuntador}', {[DCampos].slice(0,-1)} ) {DAlias}," ) //------------------------------------------------ WHERE Agregar( "TDonde", "WHERE {D|input_dummy} campos que cumplan con{DContenido|input_statement}" , {esStatement:true, renglones:1, color: "#FFA500"} , "WHERE\n{DContenido}\n" ) Agregar( "TCaso", "...primeramente{DContenido|input_value}" , {esStatement:true , color: "#FFA500"} , "{DContenido}\n" ) Agregar( "TY", "AND {DContenido|input_value}" , {esStatement:true, color: "#FFA500"} , function(D){ if(D.DContenido.trim()=="") return "" ; return "AND {DContenido}\n".procesar(D)} ) Agregar( "TO", "OR {DContenido|input_value}" , {esStatement:true, color: "#FFA500"} , function(D){ if(D.DContenido.trim()=="") return "" ; return "OR {DContenido}\n".procesar(D)} ) Agregar( "TEs", '{DCampo|input_value} {DModo|field_dropdown|{"options":[["es igual","="],["es distinto","!="],["es mayor",">"],["es mayor o igual",">="],["es menor","<"],["es menor o igual","<="]]} que/a {DContenido|input_value}' , {salida:true,renglones:1, color: "#FFA500"} , ["{DCampo}{DModo}{DContenido}\n",0] ) Agregar( "TContiene", '{DCampo|input_value} LIKE {DModo|field_dropdown|{"options":[["contiene","%E%"],["comienza con","E%"],["termina con","%E"]]} {DContenido|input_value}' , {salida:true,renglones:1, color: "#FFA500"} , function(D) { D.DContenido = D.DModo.replace( "E", D.DContenido.slice(1,-1) ) ; return ["{DCampo} LIKE '{DContenido}'\n".procesar(D),0] } ) //------------------------------------------------ ORDER BY Agregar( "TOrdenamiento", 'ORDER BY {DContenido|input_statement}' , {esStatement:true, color: "#00AAA5"} , "ORDER BY\n{[DContenido].slice(0,-1)}\n" ) Agregar( "TPrimero", 'primero por...{DContenido|input_value}', {esStatement:true,color:"#00AAA5"}, "{DContenido}" ) Agregar( "TLuego", 'luego por...{DContenido|input_value}', {esStatement:true,color:"#00AAA5"}, "{DContenido}" ) Agregar( "TPrimeroS", 'primero por...{DContenido|input_value}', {esStatement:true,color:"red"}, "{DContenido}," ) Agregar( "TLuegoS", 'luego por...{DContenido|input_value}', {esStatement:true,color:"red"}, "{DContenido}," ) Agregar( "TAscendente", 'ASC {DCampo|input_value}' ,{salida:true, color:"#00AAA5"} , ["{DCampo} ASC,",0] ) Agregar( "TDescendente", 'DESC {DCampo|input_value}' ,{salida:true, color:"#00AAA5"} , ["{DCampo} DESC,",0] ) //------------------------------------------------ CANTIDAD Agregar( 'TPrimeros' , 'LIMIT primeros {DNumero|input_value|{"check":"Number"}' , { esStatement: true, color: "" } , 'LIMIT\n{DNumero}\n' ) Agregar( 'TPrimerosDesde' , 'LIMIT {DNumero|input_value|{"check":"Number"}, {DOffset|input_value|{"check":"Number"}' , { esStatement: true, color: "" } , 'LIMIT\n{[DNumero]||100}, {[DOffset]||0}\n' ) //------------------------------------------------ PHP Agregar( "PIniciarPHP", "Código PHP {D|input_dummy}{DContenido|input_statement}", {color:"#FFAA22"}, "< \?php\n{DContenido}" ) Agregar( "PErrores", 'Habilitar ver errores', {esStatement: true, color: "#A5AA00"} , function(){return"\n// Bloque: PErrores\nini_set('display_errors', 1);\nini_set('display_startup_errors', 1);\nerror_reporting(E_ALL);"} ) Agregar( "PConector", 'Conector para MySQLi {D|input_dummy}' +'Host: {DHost|field_input|{"text":"localhost"}{D|input_dummy}' +'Usuario: {DUsuario|field_input|{"text":"tu usuario"}{D|input_dummy}' +'Contraseña: {DContra|field_input|{"text":"contraseña"}{D|input_dummy}' +'Base inicial: {DBase|field_input|{"text":"nombre de la base"}' , {esStatement:true, color:"#A5AA00"} , function(D) { return "function conectar() { return new mysqli(" + '"'+D.DHost+'", ' + '"'+D.DUsuario+'", ' + '"'+D.DContra+'", ' + '"'+D.DBase+'" ' +"); }\n" } ) Agregar( 'TGenerar' , 'Imprimir resultados en formato {DFormato|field_dropdown|{"options":[["JSON","json"],["CSV con coma","csvcoma"],["CSV con punto y coma","csvpc"],["TSV", "tsv"],["Tabla HTML","tablahtml"]]}' , { esStatement: true, color: "#554400"} , function(D){ var Extender = "" ; switch( D.DFormato ) { case "tsv": Extender = "print arraytocsv( $resultado, '\\t' ) ;\n" break ; case "csvcoma": Extender = "print arraytocsv( $resultado, ',' ) ;\n" break ; case "csvpc": Extender = "print arraytocsv( $resultado, ';' ) ;\n" break ; case "json": Extender = "print json_encode( $resultado ) ;\n" ; break ; case "tablahtml": Extender = ` print '
| $titulo | " ; print "
|---|
| $columna | " ; } print "