diff --git a/VERSION b/VERSION index 407e7a65..dafb2b27 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.4.1-alpha.2+timestamp.2013.01.30.09.44.09 +Version 2.4.1-alpha.2+timestamp.2013.01.30.12.29.40 diff --git a/applications/admin/languages/it.py b/applications/admin/languages/it.py index 957fe0bf..98bc43b6 100644 --- a/applications/admin/languages/it.py +++ b/applications/admin/languages/it.py @@ -23,6 +23,7 @@ 'Admin language': 'Admin language', 'administrative interface': 'administrative interface', 'Administrator Password:': 'Password Amministratore:', +'An error occured, please %s the page': 'An error occured, please %s the page', 'and rename it (required):': 'e rinominala (obbligatorio):', 'and rename it:': 'e rinominala:', 'appadmin': 'appadmin ', @@ -144,8 +145,10 @@ 'Get from URL:': 'Get from URL:', 'Git Pull': 'Git Pull', 'Git Push': 'Git Push', +'graph model': 'graph model', 'Hello World': 'Salve Mondo', 'Help': 'aiuto', +'Hide/Show Translated strings': 'Hide/Show Translated strings', 'htmledit': 'modifica come html', 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.', 'Import/Export': 'Importa/Esporta', @@ -195,6 +198,8 @@ 'NO': 'NO', 'No databases in this application': 'Nessun database presente in questa applicazione', 'no match': 'nessuna corrispondenza', +'or alternatively': 'or alternatively', +'Or Get from URL:': 'Or Get from URL:', 'or import from csv file': 'oppure importa da file CSV', 'or provide app url:': "oppure fornisci url dell'applicazione:", 'Original/Translation': 'Originale/Traduzione', @@ -219,6 +224,7 @@ 'record does not exist': 'il record non esiste', 'record id': 'ID del record', 'register': 'registrazione', +'reload': 'reload', 'Remove compiled': 'rimozione codice compilato', 'request': 'request', 'Resolve Conflict file': 'File di risoluzione conflitto', @@ -242,6 +248,7 @@ 'Start wizard': 'start wizard', 'state': 'stato', 'static': 'statico', +'Static': 'Static', 'Static files': 'Files statici', 'Stylesheet': 'Foglio di stile (stylesheet)', 'submit': 'invia', @@ -261,6 +268,7 @@ 'There are no models': 'Non ci sono modelli', 'There are no modules': 'Non ci sono moduli', 'There are no plugins': 'There are no plugins', +'There are no private files': 'There are no private files', 'There are no static files': 'Non ci sono file statici', 'There are no translators, only default language is supported': 'Non ci sono traduzioni, viene solo supportato il linguaggio di base', 'There are no views': 'Non ci sono viste ("view")', @@ -280,6 +288,7 @@ 'Translation strings for the application': 'Translation strings for the application', 'try': 'prova', 'try something like': 'prova qualcosa come', +'Try the mobile interface': 'Try the mobile interface', 'try view': 'try view', 'Unable to check for upgrades': 'Impossibile controllare presenza di aggiornamenti', 'unable to create application "%s"': 'impossibile creare applicazione "%s"', @@ -298,6 +307,7 @@ 'Update:': 'Aggiorna:', 'upgrade web2py now': 'upgrade web2py now', 'upload': 'upload', +'Upload': 'Upload', 'Upload & install packed application': 'Carica ed installa pacchetto con applicazione', 'Upload a package:': 'Upload a package:', 'Upload and install packed application': 'Upload and install packed application', @@ -308,6 +318,7 @@ 'Use an url:': 'Use an url:', 'variables': 'variables', 'Version': 'Versione', +'Version %s.%s.%s %s (%s)': 'Version %s.%s.%s %s (%s)', 'Version %s.%s.%s (%s) %s': 'Version %s.%s.%s (%s) %s', 'versioning': 'sistema di versioni', 'Versioning': 'Versioning', diff --git a/gluon/dal.py b/gluon/dal.py index 85b70b9d..4e3945a2 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -3063,6 +3063,8 @@ class MSSQLAdapter(BaseAdapter): if limitby: (lmin, lmax) = limitby sql_s += ' TOP %i' % lmax + if 'GROUP BY' in sql_o: + sql_o = sql_o[:sql_o.find('ORDER BY ')] return 'SELECT %s %s FROM %s%s%s;' % (sql_s, sql_f, sql_t, sql_w, sql_o) TRUE = 1 @@ -3205,7 +3207,18 @@ class MSSQL3Adapter(MSSQLAdapter): def select_limitby(self, sql_s, sql_f, sql_t, sql_w, sql_o, limitby): if limitby: (lmin, lmax) = limitby - return 'SELECT %s FROM (SELECT %s ROW_NUMBER() over (order by id) AS w_row, %s FROM %s%s%s) TMP WHERE w_row BETWEEN %i AND %s;' % (sql_f,sql_s,sql_f,sql_t,sql_w,sql_o,lmin,lmax) + if lmin == 0: + sql_s += ' TOP %i' % lmax + return 'SELECT %s %s FROM %s%s%s;' % (sql_s, sql_f, sql_t, sql_w, sql_o) + lmin += 1 + sql_o_inner = sql_o[sql_o.find('ORDER BY ')+9:] + sql_g_inner = sql_o[:sql_o.find('ORDER BY ')] + sql_f_outer = ['f_%s' % f for f in range(len(sql_f.split(',')))] + sql_f_inner = [f for f in sql_f.split(',')] + sql_f_iproxy = ['%s AS %s' % (o, n) for (o, n) in zip(sql_f_inner, sql_f_outer)] + sql_f_iproxy = ', '.join(sql_f_iproxy) + sql_f_oproxy = ', '.join(sql_f_outer) + return 'SELECT %s %s FROM (SELECT %s ROW_NUMBER() OVER (ORDER BY %s) AS w_row, %s FROM %s%s%s) TMP WHERE w_row BETWEEN %i AND %s;' % (sql_s,sql_f_oproxy,sql_s,sql_f,sql_f_iproxy,sql_t,sql_w,sql_g_inner,lmin,lmax) return 'SELECT %s %s FROM %s%s%s;' % (sql_s,sql_f,sql_t,sql_w,sql_o) def rowslice(self,rows,minimum=0,maximum=None): return rows @@ -3249,6 +3262,7 @@ class MSSQL2Adapter(MSSQLAdapter): def execute(self,a): return self.log_execute(a.decode('utf8')) + class SybaseAdapter(MSSQLAdapter): drivers = ('Sybase',) @@ -6508,6 +6522,7 @@ ADAPTERS = { 'oracle': OracleAdapter, 'mssql': MSSQLAdapter, 'mssql2': MSSQL2Adapter, + 'mssql3': MSSQL3Adapter, 'sybase': SybaseAdapter, 'db2': DB2Adapter, 'teradata': TeradataAdapter,