mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-11-01 05:21:32 +08: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
	 zadam
						zadam