up
This commit is contained in:
@@ -283,41 +283,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="relative">
|
|
||||||
<textarea id="sql-editor" x-model="sqlText"
|
|
||||||
@input.debounce.150ms="onSqlInput()"
|
|
||||||
@keydown="onSqlKeydown($event)"
|
|
||||||
@keydown.ctrl.enter.prevent="runQuery()"
|
|
||||||
@keydown.meta.enter.prevent="runQuery()"
|
|
||||||
@scroll="closeAutocomplete()"
|
|
||||||
@click="closeAutocomplete()"
|
|
||||||
:placeholder="isMongo ? 'db.coleccion.find({})\n// Ctrl+Enter para ejecutar\n// db.coleccion.insertOne({campo: \'valor\'})' : isRedis ? '# Comandos Redis (uno por línea)\nKEYS *\nGET mi_clave\nHGETALL mi_hash\n# Ctrl+Enter para ejecutar' : '-- Escribe tu consulta SQL aquí\n-- Ctrl+Enter para ejecutar\nSELECT * FROM tabla LIMIT 100;'"
|
|
||||||
class="w-full bg-gray-900 text-gray-100 font-mono text-sm p-4 resize-none outline-none leading-relaxed"
|
|
||||||
style="height:180px; tab-size:2;"></textarea>
|
|
||||||
<!-- Autocomplete dropdown -->
|
|
||||||
<div x-show="autocompleteVisible" x-cloak
|
|
||||||
x-ref="autocomplete"
|
|
||||||
:style="'position:absolute;left:'+autocompletePos.left+'px;top:'+autocompletePos.top+'px;z-index:100;'"
|
|
||||||
class="bg-white border border-gray-300 rounded-lg shadow-xl max-h-48 overflow-y-auto min-w-[160px]">
|
|
||||||
<template x-for="(item, i) in autocompleteItems" :key="i">
|
|
||||||
<div @click="selectAutocomplete(i)"
|
|
||||||
class="px-3 py-1.5 text-xs font-mono cursor-pointer flex items-center gap-2"
|
|
||||||
:class="i === autocompleteIdx ? 'bg-[#8eb02f] text-white' : 'hover:bg-gray-100 text-gray-700'">
|
|
||||||
<span x-text="item.label"></span>
|
|
||||||
<span class="ml-auto text-[9px] opacity-60" x-text="item.type"></span>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
<!-- Typo suggestions -->
|
|
||||||
<div x-show="typoSuggestions.length > 0" x-cloak class="mt-1 flex flex-wrap gap-1">
|
|
||||||
<template x-for="(s, i) in typoSuggestions" :key="i">
|
|
||||||
<button @click="applyTypoFix(s)"
|
|
||||||
class="text-[10px] px-2 py-0.5 rounded bg-yellow-50 border border-yellow-200 text-yellow-700 hover:bg-yellow-100 transition font-mono">
|
|
||||||
¿Quisiste decir: <span class="font-semibold" x-text="s"></span>?
|
|
||||||
</button>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- ─── Helpers SQL (solo MySQL/PostgreSQL, no Redis) ─── -->
|
<!-- ─── Helpers SQL (solo MySQL/PostgreSQL, no Redis) ─── -->
|
||||||
<div x-show="!isMongo && !isRedis && selectedConxId" class="mt-1.5">
|
<div x-show="!isMongo && !isRedis && selectedConxId" class="mt-1.5">
|
||||||
<!-- Chips rápidos -->
|
<!-- Chips rápidos -->
|
||||||
|
|||||||
@@ -298,8 +298,14 @@ func UpdateCellHandler(c *fiber.Ctx) error {
|
|||||||
valueSQL = "'" + strings.ReplaceAll(body.Value, "'", "''") + "'"
|
valueSQL = "'" + strings.ReplaceAll(body.Value, "'", "''") + "'"
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlText := fmt.Sprintf("UPDATE %s SET %s = %s WHERE %s = '%s'",
|
// Determinar si pk_value es numérico para no entrecomillarlo
|
||||||
qTable, qCol, valueSQL, qPkCol, strings.ReplaceAll(body.PkValue, "'", "''"))
|
pkValueSQL := "'" + strings.ReplaceAll(body.PkValue, "'", "''") + "'"
|
||||||
|
if _, err := strconv.ParseFloat(body.PkValue, 64); err == nil {
|
||||||
|
pkValueSQL = body.PkValue
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlText := fmt.Sprintf("UPDATE %s SET %s = %s WHERE %s = %s",
|
||||||
|
qTable, qCol, valueSQL, qPkCol, pkValueSQL)
|
||||||
|
|
||||||
result := services.ExecuteSQL(conx, body.Database, sqlText)
|
result := services.ExecuteSQL(conx, body.Database, sqlText)
|
||||||
if result.Error != "" {
|
if result.Error != "" {
|
||||||
@@ -524,6 +530,9 @@ SQL original:
|
|||||||
%s
|
%s
|
||||||
|
|
||||||
SQL optimizado:`, sql)
|
SQL optimizado:`, sql)
|
||||||
|
case "nl2sql":
|
||||||
|
// El prompt ya viene construido desde NL2SQLHandler (incluye esquema + descripción)
|
||||||
|
prompt = sql
|
||||||
default:
|
default:
|
||||||
prompt = fmt.Sprintf(`Eres un experto en SQL. Ayuda con esta consulta SQL. Devuelve SOLO el SQL resultante, sin explicaciones.
|
prompt = fmt.Sprintf(`Eres un experto en SQL. Ayuda con esta consulta SQL. Devuelve SOLO el SQL resultante, sin explicaciones.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user