115 lines
4.1 KiB
Plaintext
115 lines
4.1 KiB
Plaintext
<cfimport prefix="d" taglib="lib/data"/>
|
|
<cfimport prefix="layout" taglib="layout"/>
|
|
|
|
<cfparam name="account" default="1445"/>
|
|
<cfquery name="qS3Current" datasource="billing-s3">
|
|
select * from s3billing.buskets_current_stat(<cfqueryparam cfsqltype="cf_sql_varchar" value=#account#/>)
|
|
</cfquery>
|
|
<!--- <cfdump var=#qS3Current#/> --->
|
|
<style>
|
|
body, table {font-family: tahoma, verdana, arial;}
|
|
table {border-collapse:collapse; border: 1px solid gray;}
|
|
td,th {border: 1px solid gray; padding:.3em;}
|
|
</style>
|
|
Имена колонок из резалтсета (универсальный код) select * from s3billing.buskets_current_stat(account)
|
|
<table>
|
|
<tr>
|
|
<cfoutput>
|
|
<cfloop list=#queryColumnList(qS3Current)# item="col">
|
|
<th>#col#</th>
|
|
</cfloop>
|
|
</cfoutput>
|
|
</tr>
|
|
<cfoutput query="qS3Current">
|
|
<tr>
|
|
<cfloop list=#queryColumnList(qS3Current)# item="col">
|
|
<td>#qS3Current[col]#</td>
|
|
</cfloop>
|
|
</tr>
|
|
</cfoutput>
|
|
</table>
|
|
|
|
Колонки поименованы в шаблоне
|
|
<cfquery name="qS3CurrentM" datasource="billing-s3">
|
|
select
|
|
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
|
|
<d:field title="Bucket">name</d:field>
|
|
<d:field title="Placement">placement</d:field>
|
|
<d:field title="Квота вкл.">bucket_quota_enabled</d:field>
|
|
<d:field title="Квота на объем">bucket_quota_max_size</d:field>
|
|
<d:field title="Квота на число объектов">bucket_quota_max_objects</d:field>
|
|
<d:field title="Объем">usage_rgw_main_size_actual</d:field>
|
|
<d:field title="Число объектов">usage_rgw_main_num_objects</d:field>
|
|
</d:field_set>
|
|
from s3billing.buskets_current_stat(<cfqueryparam cfsqltype="cf_sql_varchar" value=#account#/>)
|
|
</cfquery>
|
|
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<layout:grid_head titleMap=#titleMap#>
|
|
<td width="5%"><layout:column_head name="name" arrows=false/></td>
|
|
<td width="5%"><layout:column_head name="placement" arrows=false/></td>
|
|
<td width="5%"><layout:column_head name="bucket_quota_enabled" arrows=false/></td>
|
|
<td width="5%"><layout:column_head name="bucket_quota_max_size" arrows=false/></td>
|
|
<td width="5%"><layout:column_head name="bucket_quota_max_objects" arrows=false/></td>
|
|
<td width="5%"><layout:column_head name="usage_rgw_main_size_actual" arrows=false/></td>
|
|
<td width="5%"><layout:column_head name="usage_rgw_main_num_objects" arrows=false/></td>
|
|
</layout:grid_head>
|
|
</tr>
|
|
</thead>
|
|
|
|
<cfoutput query="qS3CurrentM">
|
|
<tr>
|
|
<td>#name#</td>
|
|
<td>#placement#</td>
|
|
<td>#bucket_quota_enabled#</td>
|
|
<td>#bucket_quota_max_size#</td>
|
|
<td>#bucket_quota_max_objects#</td>
|
|
<td>#usage_rgw_main_size_actual#</td>
|
|
<td>#usage_rgw_main_num_objects#</td>
|
|
</tr>
|
|
</cfoutput>
|
|
</table>
|
|
|
|
Резалтсет в JSON (названия колонок переведены в camelCase)
|
|
<pre>
|
|
<cfoutput>#query2json(qS3CurrentM,true)#</cfoutput>
|
|
</pre>
|
|
<cffunction name="query2json"
|
|
output="false"
|
|
hint="print query in json format as array of structures">
|
|
<cfargument name="qry" type="query" required="true"/><!--- column names should not contain commas --->
|
|
<cfargument name="convertSnakeToCamel" type="boolean" default=true/>
|
|
|
|
<cfset var columnsIn=#arguments.qry.columnList()#/>
|
|
<cfset var columnsOut=""/>
|
|
|
|
<cfif arguments.convertSnakeToCamel>
|
|
<cfloop list=#columnsIn# item="col">
|
|
<cfset columnsOut=listAppend(columnsOut,snake2camel(col))/>
|
|
</cfloop>
|
|
|
|
<cfset var outArray=arrayNew(1)/>
|
|
//copy fields to structure, renaming fields, this preserves data type
|
|
<cfloop query=#arguments.qry#>
|
|
<cfset var structRow=structNew()/>
|
|
<cfloop index="i" from="1" to=#listLen(columnsOut)#>
|
|
<cfset structInsert(structRow,"#listGetAt(#columnsOut#,i)#",arguments.qry["#listGetAt(#columnsIn#,i)#"])/>
|
|
</cfloop>
|
|
<cfset arrayAppend(outArray,structRow)/>
|
|
</cfloop>
|
|
|
|
<cfreturn serializeJSON(outArray)/>
|
|
<cfelse>
|
|
<cfreturn serializeJSON(arguments.qry,"struct")/>
|
|
</cfif>
|
|
</cffunction>
|
|
<cffunction name="snake2camel"
|
|
returntype="string"
|
|
output="false"
|
|
hint="convert snake style name to camel style name">
|
|
<cfargument name="snake" type="string" required="true" />
|
|
<cfreturn #reReplace(ARGUMENTS.snake,"_([a-z])","\u\1","ALL")#/>
|
|
</cffunction> |