PragmaSQL Features

PragmaSQL Features Specification

Syntax Highlighting


• Keywords ( FROM, WHERE, IN, ON, EXISTS, OR, AND, NOT, AS ...)

• Action Words (SELECT, INSERT, UPDATE, CREATE, EXECUTE ...)

• Data Types

• Objects ( PROCEDURE, VIEW, TABLE , FUNCTION ...)

• Conditional and loop constructs ( IF, ELSE, CASE, WHILE ...)

• Highlighting for single line (--) and multiline (/**/) comments

• Bracket and paranthesis matching with shading effect

• String highlighting

• Operators (=, +)

• Aggregate functions

• System procedures

• Information schema names

• System tables

Object Explorer



PragmaSQL has neatly organized Object Explorer. Each server connection is listed as a root node in the explorer. Root nodes have databases as their immediate children. Each database node has folders such as Tables, Views, Procedures, Synonyms and Functions.

Object Explorer is also the primary means for PragmaSQL functionality. When you select and right click an object PragmaSQL is smart enough to provide you list of functions in a pop up menu supporting that specific kind of database object




Object explorer folders support filtering of objects by name. You just provide the part of the object name and select the filter type(Plain text or regular expression). Object explorer filters folder content the way you instructed.

Editor Enhancements





Microsoft Visual Studio has very nice feature called regions. You can define a region of code with #region and #endregion special directives and the code between these keywords is treated as a block of code by the editor. Code blocks can be expanded and collapsed during coding which will allow you to focus on the region of code you are most interested. Surely this helps programmers very much during code navigation and debugging.

PragmaSQL has support for regions ( code blocks ). You can define code blocks with special #block and #endblock keywords and provide a description for the code between these special keywords. PragmaSQL code blocks follow a special pattern. Code block keywords are placed in single line comments and you put the description of the block right after the #block keyword starting with < and ending with > special characters. Code blocks can be nested.

Multiline T-SQL comments are also treated as code block by PragmaSQL.

Code Completion Proposal




PragmaSQL has extensive code completion proposal feature. Besides standard database objects like tables, views , stored procedures and user defined functions, PragmaSQL provides you with code completion proposal for temorary tables, local variables (including table variables) and table aliases.

Code completion proposal feature supports fully qualified object names too. As you write down [DatabaseName].[Owner].[ObjectNa...] PragmaSQL automatically switches to the correct database and brings you only the objects owned by the specified database user.

Code completion proposal feature also lists the columns of respective table, view, table/view aliases, temporary/ local variable table objects.

Manual filtering of database object through code completion window is also supported

Script And Code Snippet Sharing


PragmaSQL Database





PragmaSQL utilizes script and code snippet sharing through its own database. You can install PragmaSQL tables and stored procedures from Options menu and then you are ready to go with sharing features.

NOTE: You can download PragmaSQL database object creation script from PragmaSQL Online web site.

 


Shared Scripts





You can access shared scripts through View->Shared Scripts menu option. Shared script are organized in a tree view hierarchy. You can create folders to group similar shared scripts and put your shared scripts under these folders. Shared scripts pad also supports drag and drop for easy organization of your scripts.

Shared scripts are edited with the script editor by default. You can share any T-SQL script from the script editor with your coworkers. Sure you can open shared scripts from the script editor.

You can attach help text to the shared scripts. Help text is persisted in RTF format so that you can apply any custom formatting to your help text, including inserting images.


 





 

You can defined code snippets and share these snippets with your coworkers almost in same way you define shared scripts. Shared code snippets support all features described for shared scripts.

You can invoke shared code snippets from script editor with Ctrl+J key combination.

Code completion proposal (invoked with Ctrl+J from the script editor) supports multiple snippet repositories. Shared code snippets is only one of them, you can also define local code snippets and navigate through these lists with code completion proposal dialog.

 

Defining Local Code Snippets

 

 


 

You can define local code snippets through Tools -> Options menu item by selecting Script Editor -> Code Completion Lists node in the options dialog.

Multiple code completion lists are allowed. You invoke these lists by pressing Ctrl+J in the script editor.


 

 

Project Support





You can organize all your development work using PragmaSQL projects. PragmaSQL projects may include various items such as  folders,database connections, any database object under selected connection and any local file.

PragmaSQL persists your project files and full folder hierarchy under the selected local root folder

Database connections are encrypted and written in a local xml file. During consequent edit actions you are promted for valid password to access the specified database.

Object Grouping Support





Object grouping is meant to provide the developers an alternative way to organize the database objects they are working on. With object grouping you can categorize your objects for example by use cases they are used in or by tables they operate on or any other meaning you give to a group of objects.

Object grouping is very simple. Navigate to the database you will group the objects from and simply select and drag objects from the Object Explorer and drop these selected objects on a folder in the Object Grouping editor.

NOTE: Object Grouping needs PragmaSQLObjectGroup table and some procedures to operate. The table and needed procedures are created automatically by PragmaSQL in your database when you try to perform object grouping for the first time, of course you are asked for confirmation.

By persisting grouping information in your database you have the advantage of not loosing object grouping information during database restore operations. Object grouping goes in hand with your database and is meaningful for the appropriate version of your database.

Dropped objects are automatically deteceted by the Object Grouping editor while you navigate and displayed with an exclamation icon so that you can remove these objects from the object groups.

You can add help text for each object in rich text format, so that you can provide reference information to your co-workers.

Object Change History






PragmaSQL logs changes made to objects of type stored procedure, view, trigger and user defined function to its own database. After changing an object in the script editor and committing that change to the database PragmaSQL automatically logs the commited script to the database along with the username and the date of the change. This feature can be used as the native source code control mechanism.You can then navigate to Change History Viewer via Object Explorer and list all changes filtered by object type and/or object name.

Database Search





You can search your database for objects by name or text included in the object script or table/view columns.

-      If you provide object name as the criteria of your search only matches in the object name will be taken into account.

-      If you provide search text as the criteria syscomments system table will be searched.

NOTE: Database search operates with LIKE, so if any part of the object name or object script contains the criteria you specified that will be a match.

After finding the objects you are interested in you can navigate (open or modify) to matched objects by double clicking that object in the result list.

Scripting Helpers

Table CRUD (Create, Update and Delete stored procedures) Generation





PragmaSQL can generate create, update, delete, list all and list single stored procedures (CRUD procedures) for you automatically. This feature can be a real time saver if you heavily develop client/server database applications. Simply you select the table from the Object Explorer and open the popup menu by right clicking on that node and find the “Script” sub menu item in the popup. CRUD generator will try to neatly organize generated stored procedures by exploding the procedure names to different parts as prefix, group, table name and operation. You can edit all these parts to match your naming convention.

 

Scripting Database Objects




 

 

You can script database objects to a new script editor window, to a single file or to a folder with PragmaSQL. To perform object scripting navigate to the database in the Object Explorer window, right click on the database node and open the popup menu and click “Script Objects” menu item. You will be asked for the destination (window, file, folder) , object types and object name filtering criteria. Press start and PragmaSQL will script the matching objects to the selected destination.

Help System Integration





PragmaSQL comes with some standard add ins. HtmlHelp2 integration is one of these add ins. With HtmlHelp2 you can use Microsoft’s popular html help collections from PragmaSQL. To utilize html help you have to choose the default help collection from Help -> Configure Help menu and simply press F1 while the cursor is over a keyword in the script editor and select the topic from the Search Results window. By double clicking the topic in the search results window the topic will be displayed in a PragmaSQL web browser.

Styles

Click on the images to see the large screenshot

 

Custom Syntax Highlighters

In order to use custom syntax highlighters

  1. Download the custom syntax highlighter template you are interested in from the section below
  2. Open PragmaSQL user folder. (You can verify your user folder from PragmaSQL Optons -> Application -> General page)
  3. Copy the downloaded syntax highlighter template file to SyntaxHighlighters folder (If SyntaxHighlighters  folder does not exist create it)
  4. Open syntax highlighter template file in PragmaSQL Text editor or another text editor and customize it.
  5. After finishing customization save syntax highlighter template file
  6. In PragmaSQL under Tools main menu select Refresh Highlighters
  7. If there is an error in customized syntax highlighter template file you will get an error and syntax highlighting will be disabled for the specified language/file extension until you correct the error.

In order to uninstall custom syntax highlighters

  1. Open PragmaSQL user folder. (You can verify your user folder from PragmaSQL Optons -> Application -> General page)
  2. Browse to SyntaxHighlighters folder and remove the syntax highlighter template file(s)you are not interested in any more

Other Features

  • Server and database management with default ServerManagement add-in

  • You can access most of the PragmaSQL features via PragmaSQL.Core.dll which means you can develop custom add-ins.

  • You can define web search engines and perform quick search on web

  • PragmaSQL has embedded Web Browser which will provide you with tabbed browsing

  • PragmaSQL has text editor with syntax highlighting for programming languages like C#, PHP, JavaScript, ASP(X) and HTML

  • PragmaSQL has embedded diff tool which can be accessed from many different places with popup menus.

Personal Edition Limitations

  • 10 concurrent windows allowed
  • 3 connections can be specified in Saved Connections list
  • Custom syntax highlighters can not be used
  • Object Grouping not available
  • Object Change logging not available
  • Shared scripts/snippets not available
  • Multiple Database execution not available
  • Only Docking MDI supported
  • SQL Server Management AddIn can not be used

Change History

Version 2.0.0.102

  • Object Explorer -> Drop Object bug resolved
  • Code completion proposal schema related issue fixed.

Version 2.0.0.101

  • PragmaSQL upgraded to Microsoft .NET Framework 3.5. You will have to install .NET Framework 3.5 in order to use PragmaSQL
  • Schema support for Microsoft SQL Server 2005/2008 implemented. PragmaSQL can now handle objects owned by different schemas.
  • Windows 7 specific features like jump lists, dialogs and task bar progress added. In order to experience these new features you shall run PragmaSQL on Windows 7
  • Background recovery manager related bugs resolved
  • Object Explorer Options added. You can specify if object explorer shall show system databases, system tables and database compatibility level.

Version 1.5.0.104

DB Search related bugs fixed.
For details check issues with keys APP-40 and APP-41 here.

Version 1.5.0.104

  • Search and replace bug fix
  • Resolved APP - 38 : WindowId problem when procedure execute script is generated from object explorer.

Version 1.5.0.103

Minor improvements

Version 1.5.0.102

  • Script editor can open database connections in a separate thread.
  • Restore and recover functionality improved. Connection verification dialog will not be prompted, instead PragmaSQL will load the script and script editor will try to reconnect to the database asynchronously.
  • Shared scripts and shared snippets restored/recovered properly
  • Some minor bug fixes
  • Some parts rewritten

Version 1.5.0.101

  • Professional Edition: You can define custom syntax highlighters. 
  • Auto recover functionality added. To enable auto recover open PragmaSQL Options dialog from Tools -> Options menu. Select Application settings from the three and open Auto Recover page.
  • Palette support added. You can apply predefined palettes or define and apply your custom palette. To change palette open PragmaSQL Options dialog from Tools -> Options menu. Select Application settings from the three and open Style page.

Version 1.0.0.42

New feature added: Highlight matching words when a word is double clicked in text editor.
See screenshot

Version 1.0.0.41

Editions seperated as Personal and Professional.
  • Personal Edition is for personal usage with limited functionality and does not require license or activation key.
  • Professional Edition is the same as previous distributed version. This version requires activation key and license.

Version 1.0.0.40

  • Object Grouping:
    • Script Selected Objects functionality added
    • Import Selected Objects functionality added
    • Search order bug fixed. Check out comment of issue APP - 34 to learn how to fix order problem in existing Object Grouping support
  • Sercah On Database
    • Change Database functionality improved by adding server and database combos
  • Server Management AddIn
    • SQL Server 2008 specific Modify Table problems resolved
    • User Defined Data Types related Modify Table problem resolved
  • PragmaSQL Application
    • Bug crashing the application on startup resolved. When Document Style is selected to be SystemMdi and has at least one script editor from the previous session application crashes on startup with exception message Invalid document state.

Version 1.0.0.39

  • Maintenance release to improve machine identification

Version 1.0.0.38

  • Maintenance release

Version 1.0.0.37

  • Demo period is extended to 120 days
  • All previous demo licenses were deleted, so that you can request a new demo activation key for extra 120 day evaluation. You can delete licence.lic file from PragmaSQL installation folder and enter the new activation key provided to you by PragmaSQL Online.
  • Script editor was enhanced to support renderer add-ins. You can now develop custom renderer add-in and users can choose your renderer for rendering query results.
  • PragmaSQL Virtual Result Renderers source code published as a sample for custom renderer add-in development. Download Source Code

Version 1.0.0.36


* PragmaSQL Bulk Copy wizard introduced
* Some improvements applied to PragmaSQL Scripter wizard
* Scripter and Bulk Copy wizards moved to SQLManagement addin.

Version 1.0.0.35

- APP-27: Objects in the Object Group editor are sorted by Type, Name. Type order is a following
 * Table,
 * Stored procedure,
 * User defined functions and
 * Views
- APP-28 : After initializing Object Grouping editor, first parent node is not automatically expanded anymore.
- APP-29 : After changing database in the script editor Fast script preview was showing script for the object in wrong database. This issue was fixed.
- Database object scripting functionality changed.  PragmaSQL Scripter wizard is used for scripting. Most important improvement is that we can save our selected object names, along with the schema name,  for later use, which is a crucial feature especially needed while doing intergration testing.

Version 1.0.0.34

* [APP-24] Bug resolved for details see the blog entry
* [APP-25] Search and replace dialog improved.
* [APP-26] Fast script preview fature added. You can preview object scripts of the objects in a script editor by pressing Alt+F2. This functionality is similar with CoolIris addon for Firefox.

Version 1.0.0.33

* [APP-21] Change Database added to object search
* [APP-22] "Add Object To Group" and "Show Grouping Statistics" context menu items added to Object Explorer and Script Editor.
* Some bug fixes applied to Object Grouping.
* [COR-10] ReadOnly property added to ITextEditor interface.
* [COR-11] ScriptExecuting and ScriptExecuted events added to IScriptEditor interface. AddIn developers can cancel script execution by hooking to ScriptExecuting event
* [COR-12] Some methods and properties added to ITextEditor interface in order to provide addin developers with runtime ToolStripItem add/remove functionality.
 - In order to be able to add/remove ToolStripItems to notification tool strip AddItemToNotificationStrip, RemoveItemFromNotificationStrip methods  and NotificationStripItemCount property added
 - In order to be able to add/remove ToolStripItems to addin tool strip AddItemToAddInStrip, RemoveItemFromAddInStrip methods  and AddInStripItemCount property added
* [COR-14] EditorClosing and EditorClosed events added to ITextEditor interface. AddIn developers can cancel closing of a text editor programatically by hooking to
EditorClosing event. Also EditorClosing,EditorClosed and EditorReady events were added to IEditorServices interface for similar purposes. EditorReady is fired after
a text/script editor is ready with its content.
* [COR-15] OpenProject(string fileName) method added to IProjectExplorerServices interface.
 

Version 1.0.0.32


- Incremental search added (APP-7)
- Bit columns can be sorted (APP-14)
- Default configuration is loaded when Execute In Multiple Databases dialog is opened(APP-17)
- Application version number added to splash screen (APP-18)
- Database connection is opened in a background worker thread allowing the user to cancel connection that take too much to open (APP-19)
- Turkish locale problem of the highlighter resolved (APP-20)
- EditorServices.CurrentEditor.SaveToFile() removes file dirty indicator (COR-8)
- ExternalTools Add-In configuration moved to Tools->Options->Modules ( EXTLS - 1)

Version 1.0.0.31

- Proxy problem while product activation partly resolved. Static proxy settings for IE are used for proxy authentication.

Version 1.0.0.30

-  Packing error related with the new machine key generation method resolved
- ToolStripTextBox bug resolved in Change History Viewer

Version 1.0.0.29

- APP - 8: Script Table As Script functionality added to Object Explorer
- APP - 9: Triggers(All) node added to object explorer
- APP-10: Convert only selection to upper/lower case else convert all functionality added
- APP-11: Text copy  functionality added to messages window in script editor
- APP-12: Folded code block problem in search/replace resolved.
-Machine key generation for demo installations was changed but old version is still supported.

Version 1.0.0.28

- Execute In Multiple databases support added to Script Editor. You can execute same script against multiple servers/databases. New button added near existing Execute, Stop, Check Syntax,Show Plan buttons.  When you click Execute In Multiple Databases button you are prompted to select database connections and once you press OK your script is executed in the selected databases.You can store selected databases as default and sure restore the list from default.

- IConfigSvc added to PragmaSQL.Core.dll You can publish your configuration UserControls implementing IConfigContentEditor in Tools->Options dialog under Modules node.

- Update check performed on application startup moved to a background worker thread. If there is a new version of PragmaSQL you are notified with a messagebox.

- Saved Connections dialog modified. Connections are listed by server/user and default database and grouped by server

- Object Explorer modified. You can connect to the same server with different username and these connections are listed in Object Explorer as seperate root nodes. In previous version only one connection per server was allowed.

- Script Editor modified. Connections to the same server with differen users are listed in the Server combobox. In previous version only one item per server was listed.

Version 1.0.0.27

- ExternalTools add-in  developed and added to the distribution
- New functionality added to PragmaSQL.Core library such as HostServices.EvalMacro.
- Check for new versions added. PragmaSQL checks for updates on start if Options->General -> Check for updates on start is selected. Also you can check for updates manually using main menu Help->Check For Updates.

Version 1.0.0.26

- While logging object change history, CreatedBy username was taken from PragmaSQL System connection. This was corrected so that CreatedBy username will be taken from the current connection.

- DB Object Search created false search script when AND/OR specified.

- Script result tab captionsconvention was changed. Result page caption will use the pattern Query {BatchNo}.{Result No}[{Record Count}]
- Options menu moved under Tools menu

Version 1.0.0.25

- Due to character problems with Turkish during result export to excel, encoding option was added to PragmaSQL.
Previous versions used default encoding both in text editor and during excel export.
You can change encoding from View->Options->Script Editor->Text Editor->Other page.

Version 1.0.0.24

- Workspace restore feature added. PragmaSQL saves script/text editor and
opened project when application closed and restores workspace when opened.

- ITextEditor interface defines method void Select( CaretPosition startPos, CaretPosition endPos )
However we need an overload for this method which accepts offset value for selection start/end and looks like this
void Select(int startOffset, int endOffset)

- Access to screen cursor on the editors via the core dll.

- I can access the current ScriptEditor via HostServicesSingleton.HostServices.EditorServices.CurrentScriptEditor
and the current TextEditor via HostServicesSingleton.HostServices.EditorServices.CurrentTextEditor
but I want to be able to access the current editor that the user is editing regardless of knowing whether it is a script
or a text editor. Is it possible to have a ITextEditor valued CurrentEditor property in EditorServices?

- We can change casing(upper/lower case) all script in the current editor or all keywords.

- I can filter db objects, search any object in database.. Also i need filter columns in a specific table...
For example i write [TableName]. then code completion list displays columns in [TableName].
When i begin to write anything in the filter box, contents changes to all db objects..
Is it possible to upper/lower case only selected script?

- Execution stops when there is error in the script.

- When Allow Caret Beyon EOL causes error in search

- Roles Object privileges show filters do not work

- HostServicesSingleton.HostServices.EditorServices.CurrentScriptEditor.WordAtCursor considers minus sign a word terminator. What I expected it would do is that it should grab the whole string between the nearest whitespaces (space, tab, CRLF, etc. ) surrounding the current caret position.

Version 1.0.0.23

- Object change history accessable through script editor
-  DB search accessable through script editor
- Some performance improvements
- Some core functionality reorganization.

Version 1.0.0.22

Code completion proposal caching

Version 1.0.0.21

Connection management issues resolved.

Single instance script editor management added.

Version 1.0.0.20

• (Resolved) Main Menu -> File -> Save Script As asks twice for the file name.
• (Resolved) Script editor does not evaluate selected server and database correctly when values changed by the user. This bug causes script editor to open new script editors (ie. when trying to modify a stored procedure or open and inspect table data) with wrong connection specification.

Version 1.0.0.19

• SQL Server 2000 related bug in Object Grouping fixed
• Other SQL Server 2000 related compatibility issues fixed.
o System table sys.objects renamed to sysobjects
o System table sys_foreign_keys renamed to sysforeignkeys
o object_id column named to id column in sysobjects table.
• Object Grouping bug fixed. (When user rejects saving changes change flag was not cleared.)
• Shared Scripts bug fixed. (When user rejects saving changes change flag was not cleared.)
• Shared Snippets bug fixed. (When user rejects saving changes change flag was not cleared.)
• Script editor bug fixed. When rendering query results in same tab if the scrip executed does not return any result set unhandled exception was thrown.
• SQL Management Add-In critical bug related to Modify Table fixed. Primary key columns of the table were not identified correctly. This bug caused wrong table modification scripts to be generated.

Version 1.0.0.18


• New add-in for server and database management deployed (SQLManagement Add-In)
• Script editor now renders query results in two optional ways
1. Each result set is put in own tab
2. All result sets are put in the same tab and rendered horizontally
You can change default rendering behavior by navigating to View->Options->Script Editor->Text Editor->Other option panel
• Code completion bug resolved: When script does not contain any of the local variables, local tables or table aliases script editor throws unhandled exception when code completion is invoked.
• Local variable, table and table alias analysis is now optional to improve code completion start up performance. You can turn this setting by navigating to View->Options->Script Editor->Text Editor->Other options panel.
• Text Editor font can be changed by navigating to View->Options->Script Editor->Text Editor->General option panel.


IMPORTANT: You have to install version 1.0.0.18 of PragmaSQL application in order to use SQLManagement addin. It is also strongly recommended that you update HtmlHelp2 addin you have previously installed.

Version 1.0.0.17


• You can now delete objects from Object Explorer by using the context menu.
• Microsoft HTML Help2 integration add-in deployed.

HtmlHelp2 AddIn Installation:

1. Copy PragmaSQL.AddIn.HtmlHelp2.zip to your local
2. Start PragmaSQL’ and open AddIn Manager Dialog by navigating to Tools->AddIn Manager Menu.
3. Click Install AddIn button in AddIn Manager Dialog. Select the add-in zip previously copied in the open file dialog.
4. Restart PragmaSQL
5. You will get Contents, Index, Search, Index Results and Configure Help menu items under Help menu.
6. Click Configure Help menu item. Choose Help Collection you want to use from the list (For example: SDK documentation for SQL Server 2005) and click Apply button.
7. You can use Help2 Options dialog to change other behaviors of the addin.

Version 1.0.0.16


Application hang caused by regular expressions identified and solved by moving regular expression evaluation to background thread with default timeout of 1 second.

Version 1.0.0.15


• Object names can now be used as search criteria for Database Search
• Uninstall PragmaSQL added as start menu shortcut.
• Search and Replace behavior of the script editor modified.
• Web Search added to main menu. You can now use Google, Yahoo and other search engines for fast search from PragmaSQL web browser.
• AddIn framework integrated to PragmaSQL. New addins utilizing Object Explorer, Project Explorer, Shared Scripts, Shared Snippets, Text Editor, Script Editor and extending PragmaSQL can easily be plugged to the main application. You only need to reference PragmaSQL.Core.dll in you .NET project. PragmaSQL.Core includes core services to communicate with the main application and many other helper utilities.

Version 1.0.0.5

1) Modified script indicator auto remove

When scriptable objects (stored procedures, functions, views and triggers) are applied to database, depending on your choice, “*” is removed from the caption of the script editor. You can change this behavior by navigating to Main Menu -> View -> Options panel and change “Auto remove modified indicator…” option. If this option is not checked “*” will be preserved in the script editors caption until script is saved (default behavior)

2) Defining Code Block

You can now define code blocks marked by special single line in-comment tags. PragmaSQL Code Blocks are analogous to Visual Studio regions. Following single line in-comment tags are used to identify the code blocks.

#block: Marks the beginning of the code block
 #endblock: Marks the end of the code block

In order to activate code blocks you have to navigate to View -> Options -> Script Editor -> Text Editor ->General option panel and check “Show folding marker” and “Fold code blocks” options. Then you will be able to fold your code between --#block and --#endblock tags.

SHORTCUT: In the Script editor select the code snippet you want to make a folding code block. Right click the selected text and in the opening context menu click “Mark selection as code block” and give description for the code block.

IMPORTANT NOTE: If “Show fold markers” is not checked code blocks will not be showed as folding regions in the script editor although “Fold code blocks” and “Show fold markers for highlighted code blocks” options are checked.

3) Context menu item “Modify (Append to current) “added to Object Explorer

We define stored procedures, functions, views and triggers as scriptable objects. We can modify these objects by double clicking or selecting Modify context menu item from Object Explorer. This method opens new script editor for each object we want to modify (Default behavior). Another alternative (newly added) is opening these objects by clicking “Modify (Append to current)” context menu item. This way all objects are opened in the same editor as separate code blocks

Sign In




 

Awards


Site Map | Printable View | © 2008 - 2012 PragmaSQL | Powered by mojoPortal | HTML 5 | CSS |