javascript

Helper db.js for Cordova-sqlite-storage

Posted by admin on March 30, 2016
javascript / No Comments

Espino316 dbhelper-cordova-sqlite-storage is a helper for plugin Cordova-sqlite-storage (https://github.com/litehelpers/Cordova-sqlite-storage).
The goal is make more simple the use of the plugin (already excellent), because I like to use shorter more maintainable code.

**Important** In order to use this component, you must first install Cordova-sqlite-storage (https://github.com/litehelpers/Cordova-sqlite-storage).

Usage

Include

<script src="db.js"></script>

Declaration

var db = new DbHelper("mydb");
// mydb Es el nombre de la db

Script execution (i.e. create initial structure):

db.execScript ( "sqlscripts/setup.sql" );

In sqlscripts/setup:

CREATE TABLE IF NOT EXISTS
	schools (
		school_id int PRIMARY KEY ASC,
		school_name text
	);

Simple query:

// Variable to store the sql
var sql = "SELECT * FROM schools WHERE school_id = :schoolId";

// Variable to store the parameters, if any
var params = {};
params['schoolId'] = 9901;

// Variable for store the function to apply
// Expects an object, assoc array.

// prints:
// [{ school_id: "9001", "school_name":"PABLO LIVAS"},{ school_id: "9002", "school_name":"ADOLFO PRIETO"}]
var fn = function ( result ) {
    console.log( result );
};

// Call query
db.query(
    sql,
    params,
    fn
);

/*  Anothe example */
// We can also declare params simply with ?

// Variable to store the sql
var sql = "SELECT * FROM schools WHERE school_id = ?";

// Variable to store the parameters, if any
var params = [9901];

// Variable for store the function to apply
// Expects an object, assoc array.

// prints something like:
// [{ school_id: "9001", "school_name":"PABLO LIVAS"},{ school_id: "9002", "school_name":"ADOLFO PRIETO"}]
var fn = function ( result ) {
    console.log( result );
};

// Call query
db.query(
    sql,
    params,
    fn
);

To query with no parameters:

db.query(
  sql,
  null,
  fn
);

Inserts and updates:

The helper uses “upserts” statements. If record exists, updates, else, inserts.

// Name of the table
var tableName = "schools";

// Object with data
var tableData = {
    "shool_id": 9003,
    "school_name": "MOISEIS SAENS";
};

// Array with list of key fields
var keyFields = ["school_id"];

// Call upsert
db.upsert(tableName, tableData, keyFields);

Batch inserts / updates:

Same as previous function, but the data is an array of objects.

// Table name
var tableName = "schools";

// Object array (the data)
var tableData = [
    {
        "shool_id": 9003,
        "school_name": "MOISEIS SAENS";
    },
    {
        "shool_id": 9004,
        "school_name": "JERONIMO SILLER";
    }
];

// Array with a list of the key fields
var keyFields = ["school_id"];

// Call bulkUpsert
db.bulkUpsert(tableName, tableData, keyFields);

The use is simple, useful, short and elegant.

Tags: , , , , , ,

7 functions extendind Strings in Javascript that will save you a lot of code and are very elegant

Posted by admin on March 29, 2016
javascript / No Comments

These 7 basic string functions are easy to implement adding them to the String object, are very useful and the resulting code is a lot more legible, maintainable and elegant.

1 y 2: Encode y Decode Uri

I use these functions a lot and very often forgot to add the suffix “Component” to them. It’s kind of unnatural. With these simple extensions, my problems just went away.

/**
 * Encodes the string to URI format
 * Usage:
 *  var str = "This is a string";
 *  str = str.encodeUri();
 *  console.log( str );
 *  // Outputs "This%20is%20a%20string"
 */
String.prototype.encodeUri = function () {
  return encodeURIComponent( this );
}; // end encodeUri

/**
 * Decodes the string from Uri format
 * Usage:
 *  var str = "This%20is%20a%20string";
 *  str = str.decodeUri();
 *  console.log( str );
 *  // Outputs "This is a string";
 */
String.prototype.decodeUri = function () {
  return decodeURIComponent( this );
}; // end decodeUri

3 y 4: EscapeRegEx & ReplaceAll

For some strange reason, when replacing one string for another only the first match is replaced. This is a problem, but easily solved with these two functions and adding these extensions, use is much simpler.

/**
 * Creates a regular expression string from the string,
 * Prepending "\" special characters "escaping" the chain
 * Usage:
 *  var str = "Hi!";
 *  str = str.escapeRegExp();
 *  console.log( str );
 *  // Outputs: "Hi\!"
 */
String.prototype.escapeRegExp = function () {
    return this.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}; // end function escapeRegExp

/**
 * Replace all instances of "find" by "replace"
 * in the string
 * Usage:
 *  str = "Hello my name is $nombre, $nombre is my name";
 *  str = str.replaceAll( "$nombre", "Luis" );
 *  console.log( str );
 *  // Outputs: "Hello my name is Luis, Luis is my name"
 */
String.prototype.replaceAll = function ( find, replace ) {
  return this.replace(new RegExp(find.escapeRegExp(), 'g'), replace);
}; // end function replaceAll

5, 6 y 7: Right, Left & Contains

If VB was your first language you surely miss these functions. To implement for all strings is quite simple, saves keystrokes and the result is very intuitive:

/**
 * Returns "n" charactes to the left
 * Usage:
 *  var str = "ABCDE";
 *  str = str.left(3);
 *  console.log( str );
 *  // Outputs: "ABC"
 */
String.prototype.left = function ( n ){
	if (n <= 0)
	    return "";
	else if (n > this.length)
	    return this;
	else
	    return this.substring(0,n);
}; // end function left

/**
 * Returns "n" characteres to the right
 * Uso:
 *  var str = "ABCDE";
 *  str = str.right(3);
 *  console.log( str );
 *  // Outputs: "CDE"
 */
String.prototype.right = function ( n ) {
    if (n <= 0)
       return "";
    else if (n > this.length)
       return this;
    else {
       var iLen = this.length;
       return this.substring(iLen, iLen - n);
    }
}; // end function right

/**
 * Returns true if the string contains the parameter "str"
 * Usage:
 *  var str = "Hello world!";
 *  var lookFor = "world";
 *  var inString = str.contrains(lookFor);
 *  console.log(inString);
 *  // Outputs: true
 */
String.prototype.contains = function ( str ) {
  return (
    this.indexOf( str ) > -1
  );
}; // end function contains

Running this script at the beginning of your code will allow you to use these extensions, will make your life easier and allows you to have a clean and elegant code. Happy Coding! 🙂

Tags: , , , , , , , ,