Skip to content

Instantly share code, notes, and snippets.

@dingjing
dingjing / CleanGmailPrint.js
Created May 24, 2018 14:18
Remove gmail header for clean print.
(function(){
var msgdiv = document.querySelector('table.message table div');
msgdiv.parentNode.removeChild(msgdiv);
var body = document.querySelector('body');
body.removeChild(document.querySelector('div.bodycontainer'));
body.appendChild(msgdiv);
})();
@dingjing
dingjing / GroupEventCrossJoin.sql
Last active August 12, 2017 11:29
Group overlapping events using cross self-joins
SELECT
s1.StartTime,
MIN(t1.EndTime) AS EndTime
FROM Event_Demo s1
INNER JOIN Event_Demo t1 ON s1.StartTime <= t1.EndTime
AND NOT EXISTS(SELECT * FROM Event_Demo t2
WHERE t1.EndTime >= t2.StartTime AND t1.EndTime < t2.EndTime)
WHERE NOT EXISTS(SELECT * FROM Event_Demo s2
WHERE s1.StartTime > s2.StartTime AND s1.StartTime <= s2.EndTime)
GROUP BY s1.StartTime
@dingjing
dingjing / GroupEvent.sql
Last active August 12, 2017 23:02
Group overlapping events using analytic window functions
with detect_group_boundary as (
select
EventID,
StartTime,
EndTime,
max(EndTime) over (order by StartTime, EndTime rows between unbounded preceding and 1 preceding) as prev_max_end,
case when StartTime > isnull(max(EndTime) over (order by StartTime, EndTime rows between unbounded preceding and 1 preceding), StartTime - 1) then 'Y' end as new_group
from Event_Demo
), count_running_group_boundary as (
select
@dingjing
dingjing / StudentCourse.sql
Created August 5, 2017 16:48
Find students who take the same courses.
with course_bitmap as (
select
Course_ID,
power(2, row_number() over (order by course_id) - 1) as course_bit
from Course
)
select
sum(cb.course_bit) over (partition by sc.Student_id) as Group_id,
sc.Student_id,
sc.Course_id
@dingjing
dingjing / Neo4jBoltTest.ps1
Last active August 8, 2017 13:56
In order to query Neo4j in PowerShell using its native .Net driver version 1.4.0, these assemblies must be imported.
#Requires -Version 5.0
using namespace Neo4j.Driver.V1
Import-Module "$PSScriptRoot\Neo4j.Driver.1.4.0\lib\net46\Neo4j.Driver.dll"
Import-Module "$PSScriptRoot\System.Net.Sockets.4.1.0\lib\net46\System.Net.Sockets.dll"
Import-Module "$PSScriptRoot\System.Net.Security.4.0.0\lib\net46\System.Net.Security.dll"
Import-Module "$PSScriptRoot\System.Security.Cryptography.X509Certificates.4.1.0\lib\net46\System.Security.Cryptography.X509Certificates.dll"
Import-Module "$PSScriptRoot\System.Net.NameResolution.4.0.0\lib\net46\System.Net.NameResolution.dll"
$authToken = [AuthTokens]::Basic('neo4j', 'password')
@dingjing
dingjing / CleanupHeading.bookmarklet.js
Created July 22, 2017 14:37
Cleanup column headings for OBIEE direct SQL reports
javascript:(function(){
window.showObieeMsg = window.showObieeMsg || function(msg){
var msgDiv = document.querySelector('td#idStatusIndicator div');
if(!msgDiv){
msgDiv = document.querySelector('td#idStatusIndicator');
msgDiv.innerHTML = '<div class=\'StatusIndicatorDiv\'></div>';
msgDiv = document.querySelector('td#idStatusIndicator div');
}
msgDiv.innerHTML = msg;
setTimeout(function(){msgDiv.innerHTML=''}, 5000);
@dingjing
dingjing / RepeatAllColumn.js
Created July 16, 2017 13:58
Set all columns of an OBIEE direct SQL report to repeat format.
javascript:(function(){
window.showObieeMsg = window.showObieeMsg || function(msg){
var msgDiv = document.querySelector('td#idStatusIndicator div');
if(!msgDiv){
msgDiv = document.querySelector('td#idStatusIndicator');
msgDiv.innerHTML = '<div class=\'StatusIndicatorDiv\'></div>';
msgDiv = document.querySelector('td#idStatusIndicator div');
}
msgDiv.innerHTML = msg;
setTimeout(function(){msgDiv.innerHTML=''}, 5000);
@dingjing
dingjing / DirectSqlWizard.js
Last active July 9, 2017 15:21
Preserve column format settings of OBIEE direct SQL reports
javascript:(function(){
window.showObieeMsg = window.showObieeMsg || function(msg){
var msgDiv = document.querySelector('td#idStatusIndicator div');
if(!msgDiv){
msgDiv = document.querySelector('td#idStatusIndicator');
msgDiv.innerHTML = '<div class="StatusIndicatorDiv"></div>';
msgDiv = document.querySelector('td#idStatusIndicator div');
}
msgDiv.innerHTML = msg;
setTimeout(function(){msgDiv.innerHTML=''}, 5000);
@dingjing
dingjing / ObieeMerge.js
Created June 18, 2017 16:16
Preserve column formatting while editing direct SQL reports
javascript:(function(){
var host = window.location.host;
var path = (new URLSearchParams(window.location.search.toUpperCase())).get('PATH');
if(!path){
alert('Cannot read report path from URL. Please open the report directly in Edit mode.');
return false;
};
var rpt = XUIPanel.getEditor('idReport').report.outerHTML;
var data = JSON.stringify({'host':host,'path':path,'rpt':rpt});
var xhr = new XMLHttpRequest();
@dingjing
dingjing / ForEachDiff.ps1
Created April 20, 2017 18:45
A subtle difference between ForEach statement and ForEach-Object cmdlet
$myArray = $null
# No loop
ForEach($i in $myArray){
'In ForEach'
$i
}
# Loop once with $null value
$myArray | ForEach-Object {