wiki:WikiTableMacro

Version 10 (modified by anonymous, 4 years ago) (diff)

change delimitor so that it doesn't conflict with string concatenation

SQL Table in Wiki Page

Description

This is a simple macro that enables you to place tables resulting from SQL queries into a wiki page.

It is similar to, but simpler than, SqlQueryMacro. The main differences are that it has fewer dependencies and always queries the Trac database, rather than letting you set up a separate data connection.

Bugs/Feature Requests

Existing bugs and feature requests for WikiTableMacro are here.

If you have any issues, create a new ticket.

Download

Download the zipped source from here.

Source

You can check out WikiTableMacro from here using Subversion, or browse the source with Trac.

Example

Use the SQLTable macro:

    {{{
    #!SQLTable
        SELECT count(id) as 'Number of Tickets'
        FROM ticket
    }}}

The result will be a table.

Use the SQLScalar macro:

    {{{
    #!SQLScalar
        SELECT count(id) as 'Number of Tickets'
        FROM ticket
    }}}

The result will be a single number.

Recent Changes

[13683] by rjollos on 2014-02-19 12:53:57
Trimmed whitespace using reindent.py.
[12646] by rjollos on 2013-02-21 22:25:58
Fixes #10814: Patch by Jun Omae (jun66j5) to fix a regression introduced in [12459]. Ensure that a string is passed to format_to_html.

Lightly tested against Trac 1.1.2dev-r11682.

[12459] by rjollos on 2012-12-21 17:08:08
Refs #4452, #10724: Parse table data as wiki markup and format to HTML.

Author/Contributors

Author: optilude
Maintainer: rjollos
Contributors:


Some Patches

I added below to render_macro to provide a rudimentary sort of variable function.

    def render_macro(self, req, name, content):
+        c = content.split("|;|")
+        content = c[0]
+        if len(c) > 1 :
+                for i in c[1:] :
+                        v = i.split("=")
+                        if len(v) > 1 :
+                                k = v[0]
+                                v = v[1]
+                                content = content.replace(k,v)

i.e. you can do something like this

    {{{
    #!SQLTable
        SELECT "a", count($id) as 'Number of Tickets' 
        FROM ticket
        UNION
        SELECT "b", count($id) as 'Number of Tickets' 
        FROM ticket|;|$id=id
    }}}

Useful when you have the same id that you don't want to keep on retyping over.