mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
implemented SQL console as a type of code note
This commit is contained in:
parent
1bb895bb83
commit
c3438e0f3f
@ -1,692 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<dataSource name="document.db">
|
|
||||||
<database-model serializer="dbm" dbms="SQLITE" family-id="SQLITE" format-version="4.18">
|
|
||||||
<root id="1">
|
|
||||||
<ServerVersion>3.16.1</ServerVersion>
|
|
||||||
</root>
|
|
||||||
<schema id="2" parent="1" name="main">
|
|
||||||
<Current>1</Current>
|
|
||||||
</schema>
|
|
||||||
<collation id="3" parent="1" name="BINARY"/>
|
|
||||||
<collation id="4" parent="1" name="NOCASE"/>
|
|
||||||
<collation id="5" parent="1" name="RTRIM"/>
|
|
||||||
<table id="6" parent="2" name="api_tokens"/>
|
|
||||||
<table id="7" parent="2" name="attributes"/>
|
|
||||||
<table id="8" parent="2" name="branches"/>
|
|
||||||
<table id="9" parent="2" name="note_contents"/>
|
|
||||||
<table id="10" parent="2" name="note_revision_contents"/>
|
|
||||||
<table id="11" parent="2" name="note_revisions"/>
|
|
||||||
<table id="12" parent="2" name="notes"/>
|
|
||||||
<table id="13" parent="2" name="options"/>
|
|
||||||
<table id="14" parent="2" name="recent_notes"/>
|
|
||||||
<table id="15" parent="2" name="source_ids"/>
|
|
||||||
<table id="16" parent="2" name="sqlite_master">
|
|
||||||
<System>1</System>
|
|
||||||
</table>
|
|
||||||
<table id="17" parent="2" name="sqlite_sequence">
|
|
||||||
<System>1</System>
|
|
||||||
</table>
|
|
||||||
<table id="18" parent="2" name="sync"/>
|
|
||||||
<column id="19" parent="6" name="apiTokenId">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="20" parent="6" name="token">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="21" parent="6" name="utcDateCreated">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="22" parent="6" name="isDeleted">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="23" parent="6" name="hash">
|
|
||||||
<Position>5</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>""</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<index id="24" parent="6" name="sqlite_autoindex_api_tokens_1">
|
|
||||||
<NameSurrogate>1</NameSurrogate>
|
|
||||||
<ColNames>apiTokenId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<key id="25" parent="6">
|
|
||||||
<ColNames>apiTokenId</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
<UnderlyingIndexName>sqlite_autoindex_api_tokens_1</UnderlyingIndexName>
|
|
||||||
</key>
|
|
||||||
<column id="26" parent="7" name="attributeId">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="27" parent="7" name="noteId">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="28" parent="7" name="type">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="29" parent="7" name="name">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="30" parent="7" name="value">
|
|
||||||
<Position>5</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>''</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="31" parent="7" name="position">
|
|
||||||
<Position>6</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="32" parent="7" name="utcDateCreated">
|
|
||||||
<Position>7</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="33" parent="7" name="utcDateModified">
|
|
||||||
<Position>8</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="34" parent="7" name="isDeleted">
|
|
||||||
<Position>9</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="35" parent="7" name="deleteId">
|
|
||||||
<Position>10</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<DefaultExpression>NULL</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="36" parent="7" name="hash">
|
|
||||||
<Position>11</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>""</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="37" parent="7" name="isInheritable">
|
|
||||||
<Position>12</Position>
|
|
||||||
<DataType>int|0s</DataType>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<index id="38" parent="7" name="sqlite_autoindex_attributes_1">
|
|
||||||
<NameSurrogate>1</NameSurrogate>
|
|
||||||
<ColNames>attributeId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<index id="39" parent="7" name="IDX_attributes_noteId_index">
|
|
||||||
<ColNames>noteId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="40" parent="7" name="IDX_attributes_name_value">
|
|
||||||
<ColNames>name
|
|
||||||
value</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="41" parent="7" name="IDX_attributes_value_index">
|
|
||||||
<ColNames>value</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<key id="42" parent="7">
|
|
||||||
<ColNames>attributeId</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
<UnderlyingIndexName>sqlite_autoindex_attributes_1</UnderlyingIndexName>
|
|
||||||
</key>
|
|
||||||
<column id="43" parent="8" name="branchId">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="44" parent="8" name="noteId">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="45" parent="8" name="parentNoteId">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="46" parent="8" name="notePosition">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>INTEGER|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="47" parent="8" name="prefix">
|
|
||||||
<Position>5</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
</column>
|
|
||||||
<column id="48" parent="8" name="isExpanded">
|
|
||||||
<Position>6</Position>
|
|
||||||
<DataType>INTEGER|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="49" parent="8" name="isDeleted">
|
|
||||||
<Position>7</Position>
|
|
||||||
<DataType>INTEGER|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="50" parent="8" name="deleteId">
|
|
||||||
<Position>8</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<DefaultExpression>NULL</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="51" parent="8" name="utcDateModified">
|
|
||||||
<Position>9</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="52" parent="8" name="utcDateCreated">
|
|
||||||
<Position>10</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="53" parent="8" name="hash">
|
|
||||||
<Position>11</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>""</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<index id="54" parent="8" name="sqlite_autoindex_branches_1">
|
|
||||||
<NameSurrogate>1</NameSurrogate>
|
|
||||||
<ColNames>branchId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<index id="55" parent="8" name="IDX_branches_noteId_parentNoteId">
|
|
||||||
<ColNames>noteId
|
|
||||||
parentNoteId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="56" parent="8" name="IDX_branches_parentNoteId">
|
|
||||||
<ColNames>parentNoteId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<key id="57" parent="8">
|
|
||||||
<ColNames>branchId</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
<UnderlyingIndexName>sqlite_autoindex_branches_1</UnderlyingIndexName>
|
|
||||||
</key>
|
|
||||||
<column id="58" parent="9" name="noteId">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="59" parent="9" name="content">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<DefaultExpression>NULL</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="60" parent="9" name="hash">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>""</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="61" parent="9" name="utcDateModified">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<index id="62" parent="9" name="sqlite_autoindex_note_contents_1">
|
|
||||||
<NameSurrogate>1</NameSurrogate>
|
|
||||||
<ColNames>noteId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<key id="63" parent="9">
|
|
||||||
<ColNames>noteId</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
<UnderlyingIndexName>sqlite_autoindex_note_contents_1</UnderlyingIndexName>
|
|
||||||
</key>
|
|
||||||
<column id="64" parent="10" name="noteRevisionId">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="65" parent="10" name="content">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
</column>
|
|
||||||
<column id="66" parent="10" name="hash">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>''</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="67" parent="10" name="utcDateModified">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<index id="68" parent="10" name="sqlite_autoindex_note_revision_contents_1">
|
|
||||||
<NameSurrogate>1</NameSurrogate>
|
|
||||||
<ColNames>noteRevisionId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<key id="69" parent="10">
|
|
||||||
<ColNames>noteRevisionId</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
<UnderlyingIndexName>sqlite_autoindex_note_revision_contents_1</UnderlyingIndexName>
|
|
||||||
</key>
|
|
||||||
<column id="70" parent="11" name="noteRevisionId">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="71" parent="11" name="noteId">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="72" parent="11" name="title">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
</column>
|
|
||||||
<column id="73" parent="11" name="contentLength">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="74" parent="11" name="isErased">
|
|
||||||
<Position>5</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="75" parent="11" name="isProtected">
|
|
||||||
<Position>6</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="76" parent="11" name="utcDateLastEdited">
|
|
||||||
<Position>7</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="77" parent="11" name="utcDateCreated">
|
|
||||||
<Position>8</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="78" parent="11" name="utcDateModified">
|
|
||||||
<Position>9</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="79" parent="11" name="dateLastEdited">
|
|
||||||
<Position>10</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="80" parent="11" name="dateCreated">
|
|
||||||
<Position>11</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="81" parent="11" name="type">
|
|
||||||
<Position>12</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>''</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="82" parent="11" name="mime">
|
|
||||||
<Position>13</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>''</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="83" parent="11" name="hash">
|
|
||||||
<Position>14</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>''</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<index id="84" parent="11" name="sqlite_autoindex_note_revisions_1">
|
|
||||||
<NameSurrogate>1</NameSurrogate>
|
|
||||||
<ColNames>noteRevisionId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<index id="85" parent="11" name="IDX_note_revisions_noteId">
|
|
||||||
<ColNames>noteId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="86" parent="11" name="IDX_note_revisions_utcDateLastEdited">
|
|
||||||
<ColNames>utcDateLastEdited</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="87" parent="11" name="IDX_note_revisions_utcDateCreated">
|
|
||||||
<ColNames>utcDateCreated</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="88" parent="11" name="IDX_note_revisions_dateLastEdited">
|
|
||||||
<ColNames>dateLastEdited</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="89" parent="11" name="IDX_note_revisions_dateCreated">
|
|
||||||
<ColNames>dateCreated</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<key id="90" parent="11">
|
|
||||||
<ColNames>noteRevisionId</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
<UnderlyingIndexName>sqlite_autoindex_note_revisions_1</UnderlyingIndexName>
|
|
||||||
</key>
|
|
||||||
<column id="91" parent="12" name="noteId">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="92" parent="12" name="title">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>"note"</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="93" parent="12" name="contentLength">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="94" parent="12" name="isProtected">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="95" parent="12" name="type">
|
|
||||||
<Position>5</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>'text'</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="96" parent="12" name="mime">
|
|
||||||
<Position>6</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>'text/html'</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="97" parent="12" name="hash">
|
|
||||||
<Position>7</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>""</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="98" parent="12" name="isDeleted">
|
|
||||||
<Position>8</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="99" parent="12" name="deleteId">
|
|
||||||
<Position>9</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<DefaultExpression>NULL</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="100" parent="12" name="isErased">
|
|
||||||
<Position>10</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="101" parent="12" name="dateCreated">
|
|
||||||
<Position>11</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="102" parent="12" name="dateModified">
|
|
||||||
<Position>12</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="103" parent="12" name="utcDateCreated">
|
|
||||||
<Position>13</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="104" parent="12" name="utcDateModified">
|
|
||||||
<Position>14</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<index id="105" parent="12" name="sqlite_autoindex_notes_1">
|
|
||||||
<NameSurrogate>1</NameSurrogate>
|
|
||||||
<ColNames>noteId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<index id="106" parent="12" name="IDX_notes_title">
|
|
||||||
<ColNames>title</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="107" parent="12" name="IDX_notes_type">
|
|
||||||
<ColNames>type</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="108" parent="12" name="IDX_notes_isDeleted">
|
|
||||||
<ColNames>isDeleted</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="109" parent="12" name="IDX_notes_dateCreated">
|
|
||||||
<ColNames>dateCreated</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="110" parent="12" name="IDX_notes_dateModified">
|
|
||||||
<ColNames>dateModified</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="111" parent="12" name="IDX_notes_utcDateCreated">
|
|
||||||
<ColNames>utcDateCreated</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<index id="112" parent="12" name="IDX_notes_utcDateModified">
|
|
||||||
<ColNames>utcDateModified</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<key id="113" parent="12">
|
|
||||||
<ColNames>noteId</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
<UnderlyingIndexName>sqlite_autoindex_notes_1</UnderlyingIndexName>
|
|
||||||
</key>
|
|
||||||
<column id="114" parent="13" name="name">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="115" parent="13" name="value">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
</column>
|
|
||||||
<column id="116" parent="13" name="isSynced">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>INTEGER|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="117" parent="13" name="hash">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>""</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="118" parent="13" name="utcDateCreated">
|
|
||||||
<Position>5</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="119" parent="13" name="utcDateModified">
|
|
||||||
<Position>6</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<index id="120" parent="13" name="sqlite_autoindex_options_1">
|
|
||||||
<NameSurrogate>1</NameSurrogate>
|
|
||||||
<ColNames>name</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<key id="121" parent="13">
|
|
||||||
<ColNames>name</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
<UnderlyingIndexName>sqlite_autoindex_options_1</UnderlyingIndexName>
|
|
||||||
</key>
|
|
||||||
<column id="122" parent="14" name="noteId">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="123" parent="14" name="notePath">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="124" parent="14" name="hash">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>""</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="125" parent="14" name="utcDateCreated">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="126" parent="14" name="isDeleted">
|
|
||||||
<Position>5</Position>
|
|
||||||
<DataType>INT|0s</DataType>
|
|
||||||
</column>
|
|
||||||
<index id="127" parent="14" name="sqlite_autoindex_recent_notes_1">
|
|
||||||
<NameSurrogate>1</NameSurrogate>
|
|
||||||
<ColNames>noteId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<key id="128" parent="14">
|
|
||||||
<ColNames>noteId</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
<UnderlyingIndexName>sqlite_autoindex_recent_notes_1</UnderlyingIndexName>
|
|
||||||
</key>
|
|
||||||
<column id="129" parent="15" name="sourceId">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="130" parent="15" name="utcDateCreated">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<index id="131" parent="15" name="sqlite_autoindex_source_ids_1">
|
|
||||||
<NameSurrogate>1</NameSurrogate>
|
|
||||||
<ColNames>sourceId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<index id="132" parent="15" name="IDX_source_ids_utcDateCreated">
|
|
||||||
<ColNames>utcDateCreated</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<key id="133" parent="15">
|
|
||||||
<ColNames>sourceId</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
<UnderlyingIndexName>sqlite_autoindex_source_ids_1</UnderlyingIndexName>
|
|
||||||
</key>
|
|
||||||
<column id="134" parent="16" name="type">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>text|0s</DataType>
|
|
||||||
</column>
|
|
||||||
<column id="135" parent="16" name="name">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>text|0s</DataType>
|
|
||||||
</column>
|
|
||||||
<column id="136" parent="16" name="tbl_name">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>text|0s</DataType>
|
|
||||||
</column>
|
|
||||||
<column id="137" parent="16" name="rootpage">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>integer|0s</DataType>
|
|
||||||
</column>
|
|
||||||
<column id="138" parent="16" name="sql">
|
|
||||||
<Position>5</Position>
|
|
||||||
<DataType>text|0s</DataType>
|
|
||||||
</column>
|
|
||||||
<column id="139" parent="17" name="name">
|
|
||||||
<Position>1</Position>
|
|
||||||
</column>
|
|
||||||
<column id="140" parent="17" name="seq">
|
|
||||||
<Position>2</Position>
|
|
||||||
</column>
|
|
||||||
<column id="141" parent="18" name="id">
|
|
||||||
<Position>1</Position>
|
|
||||||
<DataType>INTEGER|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<SequenceIdentity>1</SequenceIdentity>
|
|
||||||
</column>
|
|
||||||
<column id="142" parent="18" name="entityName">
|
|
||||||
<Position>2</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="143" parent="18" name="entityId">
|
|
||||||
<Position>3</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="144" parent="18" name="sourceId">
|
|
||||||
<Position>4</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<column id="145" parent="18" name="isSynced">
|
|
||||||
<Position>5</Position>
|
|
||||||
<DataType>INTEGER|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
<DefaultExpression>0</DefaultExpression>
|
|
||||||
</column>
|
|
||||||
<column id="146" parent="18" name="utcSyncDate">
|
|
||||||
<Position>6</Position>
|
|
||||||
<DataType>TEXT|0s</DataType>
|
|
||||||
<NotNull>1</NotNull>
|
|
||||||
</column>
|
|
||||||
<index id="147" parent="18" name="IDX_sync_entityName_entityId">
|
|
||||||
<ColNames>entityName
|
|
||||||
entityId</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
<Unique>1</Unique>
|
|
||||||
</index>
|
|
||||||
<index id="148" parent="18" name="IDX_sync_utcSyncDate">
|
|
||||||
<ColNames>utcSyncDate</ColNames>
|
|
||||||
<ColumnCollations></ColumnCollations>
|
|
||||||
</index>
|
|
||||||
<key id="149" parent="18">
|
|
||||||
<ColNames>id</ColNames>
|
|
||||||
<Primary>1</Primary>
|
|
||||||
</key>
|
|
||||||
</database-model>
|
|
||||||
</dataSource>
|
|
2
libraries/codemirror/mode/meta.js
vendored
2
libraries/codemirror/mode/meta.js
vendored
@ -134,7 +134,7 @@
|
|||||||
{name: "SPARQL", mime: "application/sparql-query", mode: "sparql", ext: ["rq", "sparql"], alias: ["sparul"]},
|
{name: "SPARQL", mime: "application/sparql-query", mode: "sparql", ext: ["rq", "sparql"], alias: ["sparul"]},
|
||||||
{name: "Spreadsheet", mime: "text/x-spreadsheet", mode: "spreadsheet", alias: ["excel", "formula"]},
|
{name: "Spreadsheet", mime: "text/x-spreadsheet", mode: "spreadsheet", alias: ["excel", "formula"]},
|
||||||
{name: "SQL", mime: "text/x-sql", mode: "sql", ext: ["sql"]},
|
{name: "SQL", mime: "text/x-sql", mode: "sql", ext: ["sql"]},
|
||||||
{name: "SQLite", mime: "text/x-sqlite", mode: "sql"},
|
{name: "SQLite", mimes: ["text/x-sqlite", "text/x-sqlite;schema=trilium"], mode: "sql"},
|
||||||
{name: "Squirrel", mime: "text/x-squirrel", mode: "clike", ext: ["nut"]},
|
{name: "Squirrel", mime: "text/x-squirrel", mode: "clike", ext: ["nut"]},
|
||||||
{name: "Stylus", mime: "text/x-styl", mode: "stylus", ext: ["styl"]},
|
{name: "Stylus", mime: "text/x-styl", mode: "stylus", ext: ["styl"]},
|
||||||
{name: "Swift", mime: "text/x-swift", mode: "swift", ext: ["swift"]},
|
{name: "Swift", mime: "text/x-swift", mode: "swift", ext: ["swift"]},
|
||||||
|
@ -1,138 +0,0 @@
|
|||||||
import libraryLoader from '../services/library_loader.js';
|
|
||||||
import server from '../services/server.js';
|
|
||||||
import toastService from "../services/toast.js";
|
|
||||||
import utils from "../services/utils.js";
|
|
||||||
|
|
||||||
const $dialog = $("#sql-console-dialog");
|
|
||||||
const $query = $('#sql-console-query');
|
|
||||||
const $executeButton = $('#sql-console-execute');
|
|
||||||
const $tableSchemas = $("#sql-console-table-schemas");
|
|
||||||
const $resultContainer = $("#result-container");
|
|
||||||
|
|
||||||
let codeEditor;
|
|
||||||
|
|
||||||
$dialog.on("shown.bs.modal", e => initEditor());
|
|
||||||
|
|
||||||
export async function showDialog() {
|
|
||||||
await showTableSchemas();
|
|
||||||
|
|
||||||
utils.openDialog($dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function initEditor() {
|
|
||||||
if (!codeEditor) {
|
|
||||||
await libraryLoader.requireLibrary(libraryLoader.CODE_MIRROR);
|
|
||||||
|
|
||||||
CodeMirror.keyMap.default["Shift-Tab"] = "indentLess";
|
|
||||||
CodeMirror.keyMap.default["Tab"] = "indentMore";
|
|
||||||
|
|
||||||
// removing Escape binding so that Escape will propagate to the dialog (which will close on escape)
|
|
||||||
delete CodeMirror.keyMap.basic["Esc"];
|
|
||||||
|
|
||||||
CodeMirror.modeURL = 'libraries/codemirror/mode/%N/%N.js';
|
|
||||||
|
|
||||||
codeEditor = CodeMirror($query[0], {
|
|
||||||
value: "",
|
|
||||||
viewportMargin: Infinity,
|
|
||||||
indentUnit: 4,
|
|
||||||
highlightSelectionMatches: {showToken: /\w/, annotateScrollbar: false}
|
|
||||||
});
|
|
||||||
|
|
||||||
codeEditor.setOption("mode", "text/x-sqlite");
|
|
||||||
CodeMirror.autoLoadMode(codeEditor, "sql");
|
|
||||||
|
|
||||||
codeEditor.setValue(`SELECT title, isProtected, type, mime FROM notes WHERE noteId = 'root';
|
|
||||||
---
|
|
||||||
SELECT noteId, parentNoteId, notePosition, prefix FROM branches WHERE branchId = 'root';`);
|
|
||||||
}
|
|
||||||
|
|
||||||
codeEditor.focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function execute() {
|
|
||||||
// execute the selected text or the whole content if there's no selection
|
|
||||||
let sqlQuery = codeEditor.getSelection();
|
|
||||||
|
|
||||||
if (!sqlQuery) {
|
|
||||||
sqlQuery = codeEditor.getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = await server.post("sql/execute", {
|
|
||||||
query: sqlQuery
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!result.success) {
|
|
||||||
toastService.showError(result.error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
toastService.showMessage("Query was executed successfully.");
|
|
||||||
}
|
|
||||||
|
|
||||||
const results = result.results;
|
|
||||||
|
|
||||||
$resultContainer.empty();
|
|
||||||
|
|
||||||
for (const rows of results) {
|
|
||||||
if (rows.length === 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const $table = $('<table class="table table-striped">');
|
|
||||||
$resultContainer.append($table);
|
|
||||||
|
|
||||||
const result = rows[0];
|
|
||||||
const $row = $("<tr>");
|
|
||||||
|
|
||||||
for (const key in result) {
|
|
||||||
$row.append($("<th>").html(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
$table.append($row);
|
|
||||||
|
|
||||||
for (const result of rows) {
|
|
||||||
const $row = $("<tr>");
|
|
||||||
|
|
||||||
for (const key in result) {
|
|
||||||
$row.append($("<td>").html(result[key]));
|
|
||||||
}
|
|
||||||
|
|
||||||
$table.append($row);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function showTableSchemas() {
|
|
||||||
const tables = await server.get('sql/schema');
|
|
||||||
|
|
||||||
$tableSchemas.empty();
|
|
||||||
|
|
||||||
for (const table of tables) {
|
|
||||||
const $tableLink = $('<button class="btn">').text(table.name);
|
|
||||||
|
|
||||||
const $columns = $("<ul>");
|
|
||||||
|
|
||||||
for (const column of table.columns) {
|
|
||||||
$columns.append(
|
|
||||||
$("<li>")
|
|
||||||
.append($("<span>").text(column.name))
|
|
||||||
.append($("<span>").text(column.type))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$tableSchemas.append($tableLink).append(" ");
|
|
||||||
|
|
||||||
$tableLink
|
|
||||||
.tooltip({
|
|
||||||
html: true,
|
|
||||||
placement: 'bottom',
|
|
||||||
boundary: 'window',
|
|
||||||
title: $columns[0].outerHTML
|
|
||||||
})
|
|
||||||
.on('click', () => codeEditor.setValue("SELECT * FROM " + table.name + " LIMIT 100"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
utils.bindElShortcut($query, 'ctrl+return', execute);
|
|
||||||
|
|
||||||
$executeButton.on('click', execute);
|
|
@ -123,7 +123,7 @@ const MIME_TYPES_DICT = [
|
|||||||
{ title: "Spreadsheet", mime: "text/x-spreadsheet" },
|
{ title: "Spreadsheet", mime: "text/x-spreadsheet" },
|
||||||
{ default: true, title: "SQL", mime: "text/x-sql" },
|
{ default: true, title: "SQL", mime: "text/x-sql" },
|
||||||
{ title: "SQLite", mime: "text/x-sqlite" },
|
{ title: "SQLite", mime: "text/x-sqlite" },
|
||||||
{ default: true, title: "SQLite (Trilium)", mime: "text/x-sqlite+trilium" },
|
{ default: true, title: "SQLite (Trilium)", mime: "text/x-sqlite;schema=trilium" },
|
||||||
{ title: "Squirrel", mime: "text/x-squirrel" },
|
{ title: "Squirrel", mime: "text/x-squirrel" },
|
||||||
{ title: "Stylus", mime: "text/x-styl" },
|
{ title: "Stylus", mime: "text/x-styl" },
|
||||||
{ default: true, title: "Swift", mime: "text/x-swift" },
|
{ default: true, title: "Swift", mime: "text/x-swift" },
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
import libraryLoader from "../../services/library_loader.js";
|
import libraryLoader from "../../services/library_loader.js";
|
||||||
import TypeWidget from "./type_widget.js";
|
import TypeWidget from "./type_widget.js";
|
||||||
import keyboardActionService from "../../services/keyboard_actions.js";
|
import keyboardActionService from "../../services/keyboard_actions.js";
|
||||||
|
import server from "../../services/server.js";
|
||||||
|
import toastService from "../../services/toast.js";
|
||||||
|
import utils from "../../services/utils.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
<div class="note-detail-code note-detail-printable">
|
<div class="note-detail-code note-detail-printable">
|
||||||
@ -8,25 +11,76 @@ const TPL = `
|
|||||||
.note-detail-code {
|
.note-detail-code {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.note-detail-code-editor {
|
.note-detail-code-editor {
|
||||||
min-height: 500px;
|
flex-basis: 200px;
|
||||||
|
min-height: 200px;
|
||||||
|
flex-grow: 1;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sql-console-table-schemas button {
|
||||||
|
padding: 0.25rem 0.4rem;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
line-height: 0.5;
|
||||||
|
border-radius: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sql-console-result-wrapper {
|
||||||
|
flex-grow: 100;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sql-console-result-container {
|
||||||
|
width: 100%;
|
||||||
|
font-size: smaller;
|
||||||
|
margin-top: 10px;
|
||||||
|
flex-grow: 1;
|
||||||
|
overflow: auto;
|
||||||
|
min-height: 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<div class="sql-console-area">
|
||||||
|
Tables:
|
||||||
|
<span class="sql-console-table-schemas"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="note-detail-code-editor"></div>
|
<div class="note-detail-code-editor"></div>
|
||||||
|
|
||||||
|
<div class="sql-console-area sql-console-result-wrapper">
|
||||||
|
<div style="text-align: center">
|
||||||
|
<button class="btn btn-danger sql-console-execute">Execute query <kbd>Ctrl+Enter</kbd></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sql-console-result-container"></div>
|
||||||
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
|
|
||||||
|
let TABLE_SCHEMA;
|
||||||
|
|
||||||
export default class EditableCodeTypeWidget extends TypeWidget {
|
export default class EditableCodeTypeWidget extends TypeWidget {
|
||||||
static getType() { return "editable-code"; }
|
static getType() { return "editable-code"; }
|
||||||
|
|
||||||
doRender() {
|
doRender() {
|
||||||
this.$widget = $(TPL);
|
this.$widget = $(TPL);
|
||||||
this.$editor = this.$widget.find('.note-detail-code-editor');
|
this.$editor = this.$widget.find('.note-detail-code-editor');
|
||||||
|
this.$sqlConsoleArea = this.$widget.find('.sql-console-area');
|
||||||
|
this.$sqlConsoleTableSchemas = this.$widget.find('.sql-console-table-schemas');
|
||||||
|
this.$sqlConsoleExecuteButton = this.$widget.find('.sql-console-execute');
|
||||||
|
this.$sqlConsoleResultContainer = this.$widget.find('.sql-console-result-container');
|
||||||
|
|
||||||
keyboardActionService.setupActionsForElement('code-detail', this.$widget, this);
|
keyboardActionService.setupActionsForElement('code-detail', this.$widget, this);
|
||||||
|
|
||||||
|
utils.bindElShortcut(this.$editor, 'ctrl+return', () => this.execute());
|
||||||
|
|
||||||
|
this.$sqlConsoleExecuteButton.on('click', () => this.execute());
|
||||||
|
|
||||||
this.initialized = this.initEditor();
|
this.initialized = this.initEditor();
|
||||||
|
|
||||||
return this.$widget;
|
return this.$widget;
|
||||||
@ -81,9 +135,103 @@ export default class EditableCodeTypeWidget extends TypeWidget {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const isSqlConsole = note.mime === 'text/x-sqlite;schema=trilium';
|
||||||
|
|
||||||
|
this.$sqlConsoleArea.toggle(isSqlConsole);
|
||||||
|
|
||||||
|
if (isSqlConsole) {
|
||||||
|
await this.showTableSchemas();
|
||||||
|
}
|
||||||
|
|
||||||
this.show();
|
this.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async showTableSchemas() {
|
||||||
|
if (!TABLE_SCHEMA) {
|
||||||
|
TABLE_SCHEMA = await server.get('sql/schema');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$sqlConsoleTableSchemas.empty();
|
||||||
|
|
||||||
|
for (const table of TABLE_SCHEMA) {
|
||||||
|
const $tableLink = $('<button class="btn">').text(table.name);
|
||||||
|
|
||||||
|
const $columns = $("<ul>");
|
||||||
|
|
||||||
|
for (const column of table.columns) {
|
||||||
|
$columns.append(
|
||||||
|
$("<li>")
|
||||||
|
.append($("<span>").text(column.name))
|
||||||
|
.append($("<span>").text(column.type))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$sqlConsoleTableSchemas.append($tableLink).append(" ");
|
||||||
|
|
||||||
|
$tableLink
|
||||||
|
.tooltip({
|
||||||
|
html: true,
|
||||||
|
placement: 'bottom',
|
||||||
|
boundary: 'window',
|
||||||
|
title: $columns[0].outerHTML
|
||||||
|
})
|
||||||
|
.on('click', () => this.codeEditor.setValue("SELECT * FROM " + table.name + " LIMIT 100"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async execute() {
|
||||||
|
// execute the selected text or the whole content if there's no selection
|
||||||
|
let sqlQuery = this.codeEditor.getSelection();
|
||||||
|
|
||||||
|
if (!sqlQuery) {
|
||||||
|
sqlQuery = this.codeEditor.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await server.post("sql/execute", {
|
||||||
|
query: sqlQuery
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!result.success) {
|
||||||
|
toastService.showError(result.error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
toastService.showMessage("Query was executed successfully.");
|
||||||
|
}
|
||||||
|
|
||||||
|
const results = result.results;
|
||||||
|
|
||||||
|
this.$sqlConsoleResultContainer.empty();
|
||||||
|
|
||||||
|
for (const rows of results) {
|
||||||
|
if (rows.length === 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const $table = $('<table class="table table-striped">');
|
||||||
|
this.$sqlConsoleResultContainer.append($table);
|
||||||
|
|
||||||
|
const result = rows[0];
|
||||||
|
const $row = $("<tr>");
|
||||||
|
|
||||||
|
for (const key in result) {
|
||||||
|
$row.append($("<th>").html(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
$table.append($row);
|
||||||
|
|
||||||
|
for (const result of rows) {
|
||||||
|
const $row = $("<tr>");
|
||||||
|
|
||||||
|
for (const key in result) {
|
||||||
|
$row.append($("<td>").html(result[key]));
|
||||||
|
}
|
||||||
|
|
||||||
|
$table.append($row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
show() {
|
show() {
|
||||||
this.$widget.show();
|
this.$widget.show();
|
||||||
|
|
||||||
|
@ -661,12 +661,7 @@ div[data-notify="container"] {
|
|||||||
padding: 2px;
|
padding: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#sql-console-table-schemas button {
|
|
||||||
padding: 0.25rem 0.4rem;
|
|
||||||
font-size: 0.875rem;
|
|
||||||
line-height: 0.5;
|
|
||||||
border-radius: 0.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href^="https://"]:not(.no-arrow):after {
|
a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href^="https://"]:not(.no-arrow):after {
|
||||||
font-size: smaller;
|
font-size: smaller;
|
||||||
|
@ -76,7 +76,7 @@ const defaultOptions = [
|
|||||||
{ name: 'imageMaxWidthHeight', value: '1200', isSynced: true },
|
{ name: 'imageMaxWidthHeight', value: '1200', isSynced: true },
|
||||||
{ name: 'imageJpegQuality', value: '75', isSynced: true },
|
{ name: 'imageJpegQuality', value: '75', isSynced: true },
|
||||||
{ name: 'autoFixConsistencyIssues', value: 'true', isSynced: false },
|
{ name: 'autoFixConsistencyIssues', value: 'true', isSynced: false },
|
||||||
{ name: 'codeNotesMimeTypes', value: '["text/x-csrc","text/x-c++src","text/x-csharp","text/css","text/x-go","text/x-groovy","text/x-haskell","text/html","message/http","text/x-java","application/javascript;env=frontend","application/javascript;env=backend","application/json","text/x-kotlin","text/x-markdown","text/x-perl","text/x-php","text/x-python","text/x-ruby",null,"text/x-sql","text/x-swift","text/xml","text/x-yaml"]', isSynced: true },
|
{ name: 'codeNotesMimeTypes', value: '["text/x-csrc","text/x-c++src","text/x-csharp","text/css","text/x-go","text/x-groovy","text/x-haskell","text/html","message/http","text/x-java","application/javascript;env=frontend","application/javascript;env=backend","application/json","text/x-kotlin","text/x-markdown","text/x-perl","text/x-php","text/x-python","text/x-ruby",null,"text/x-sql","text/x-sqlite;schema=trilium","text/x-swift","text/xml","text/x-yaml"]', isSynced: true },
|
||||||
{ name: 'leftPaneWidth', value: '25', isSynced: false },
|
{ name: 'leftPaneWidth', value: '25', isSynced: false },
|
||||||
{ name: 'leftPaneVisible', value: 'true', isSynced: false },
|
{ name: 'leftPaneVisible', value: 'true', isSynced: false },
|
||||||
{ name: 'rightPaneWidth', value: '25', isSynced: false },
|
{ name: 'rightPaneWidth', value: '25', isSynced: false },
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
<%- include('dialogs/options.ejs') %>
|
<%- include('dialogs/options.ejs') %>
|
||||||
<%- include('dialogs/protected_session_password.ejs') %>
|
<%- include('dialogs/protected_session_password.ejs') %>
|
||||||
<%- include('dialogs/recent_changes.ejs') %>
|
<%- include('dialogs/recent_changes.ejs') %>
|
||||||
<%- include('dialogs/sql_console.ejs') %>
|
|
||||||
<%- include('dialogs/info.ejs') %>
|
<%- include('dialogs/info.ejs') %>
|
||||||
<%- include('dialogs/prompt.ejs') %>
|
<%- include('dialogs/prompt.ejs') %>
|
||||||
<%- include('dialogs/confirm.ejs') %>
|
<%- include('dialogs/confirm.ejs') %>
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
<div id="sql-console-dialog" class="modal fade mx-auto" tabindex="-1" role="dialog">
|
|
||||||
<div class="modal-dialog modal-dialog-scrollable modal-xl" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title">SQL console</h5>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<div>
|
|
||||||
Tables:
|
|
||||||
<span id="sql-console-table-schemas"></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="sql-console-query"></div>
|
|
||||||
|
|
||||||
<div style="text-align: center">
|
|
||||||
<button class="btn btn-danger" id="sql-console-execute">Execute <kbd>CTRL+ENTER</kbd></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="result-container" style="width: 100%; font-size: smaller; margin-top: 10px;">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
Loading…
x
Reference in New Issue
Block a user